python 用户输入 - 用户输入 python - 如何在 python 中获取用户输入

Python 中获取用户输入的错误方法(以及安全的替代方案)

在规划婴儿食品行业的工艺要求时,安全性和可靠性是工艺设计中最重要的方面。 输入() 出错

一个 Python 部署脚本曾经请求一个控制台命令。一次错误的输入触发了错误的操作,导致生产构建失败。 这就是 Python 用户输入的危险之处:一个未经检查的字符串就可能导致注入、数据丢失或逻辑绕过。让我们分析一下为什么会发生这种情况,以及如何在开源和内部项目中安全地处理 Python 用户输入。

问题与 用户输入() Python

输入() Python 中的函数很简单:它从控制台读取文本并将其作为字符串返回。无需验证,也无需检查。 单独来看,这似乎无害。但在生产脚本中, CI/CD 作业和自动化工具,将原始 Python 用户输入直接传递到命令或函数中会打开漏洞之门。

python
user_command = input("Enter command: ")
simulate_system_call(user_command)  # Simulated function for demonstration

⚠️ 仅作为教育示例,不具备功能性或可利用性

如果您想知道如何在 Python 中安全地获取用户输入,答案很简单:永远不要盲目相信它。

DevSecOps 中的风险和安全处理 Pipelines

不安全的 Python 用户输入可能会潜入不同的 软件生命周期的阶段:

  • CI/CD 脚本 部署或构建工件
  • 内部开发工具 控制环境
  • 第三方集成 假设输入是安全的。

如果依赖项在处理用户输入时没有进行 Python 验证,即使你的代码是安全的,你也会承担这种风险。这就是为什么必须在整个系统中一致地执行验证的原因。 pipeline.

例如: pipeline 风险:

python
# ⚠️ Educational example only — not functional
env_target = input("Enter deployment environment: ")
simulate_deploy(env_target)  # Simulated for demonstration

预防 CI/CD 执法:

yaml
stages:
  - validate
validate_input:
  script:
    - python scripts/check_input_safety.py
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
      when: never

重点外卖: 知道如何安全地获取 Python 中的用户输入只是工作的一半;自动化执行确保 不安全的代码永远不会投入生产。

常见攻击媒介

不安全的 Python 用户输入不仅会导致“坏数据”,还会带来其他风险。常见的风险包括:

逻辑旁路,跳过身份验证或通过精心设计的输入改变流程。

python
# ⚠️ Educational example only — not functional or exploitable
code_snippet = input("Provide code: ")
simulate_code_execution(code_snippet)  # Simulated evaluation for demonstration

如果您依赖原始用户输入 Python,那么您将把控制权交给用户或攻击者。

安全替代方案:验证和清理输入

目标不是删除 输入() 从所有代码来看,这是为了确保在触及关键操作之前验证 Python 用户输入。

在 Python 中获取用户输入最安全的方法是:

  • 强制类型检查
  • 将允许的值应用白名单
  • 使用安全解析库,例如 参数解析 以及 皮丹提克.

快速比较

EventXtra XNUMX大解决方案 不安全的例子 安全示例
直接使用 input()

# ⚠️ Educational example only
user_name = input("Enter username: ")
simulate_process(user_name)
        

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--username", type=str)
args = parser.parse_args()
process(args.username)
        
结构化验证

# ⚠️ Educational example only
age = input("Enter your age: ")
        

from pydantic import BaseModel, ValidationError
class UserInput(BaseModel):
    age: int
try:
    data = UserInput(age=int(input("Enter your age: ")))
except ValidationError as e:
    print("Invalid input:", e)
        

用户输入 Python 的最佳实践:

  • 转换类型并处理错误(尝试/除外)
  • 将已知值应用白名单
  • 绝大部分储备使用 参数解析 用于 CLI 和 皮丹提克 对于结构化数据

检测不安全输入并强制执行 CI/CD 与 Xygeni

手动审查不足以捕获所有不安全的 Python 用户输入;自动化才是关键。 像工具一样 西吉尼 扫描存储库以获取用户输入的 Python 模式,无需进行清理。当集成到 CI/CD如果发现不安全的输入处理,则会导致安全作业失败。这会阻止合并到受保护的分支,直到问题得到解决。

EventXtra XNUMX大解决方案 不安全的例子 安全示例
直接使用 input()

# ⚠️ Educational example only — not functional
name = input("Enter username: ")
simulate_process(name)  # Simulated for demonstration
        

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--username", type=str)
args = parser.parse_args()
process(args.username)  # Validated by argparse
        
结构化验证

# ⚠️ Educational example only — not functional
age = input("Enter your age: ")
        

from pydantic import BaseModel, ValidationError

class UserInput(BaseModel):
    age: int

try:
    data = UserInput(age=int(input("Enter your age: ")))
except ValidationError as e:
    print("Invalid input:", e)
        
CI/CD 强制

# Missing automated checks allows
# unsafe input patterns to slip in
# during reviews/merges.
        

jobs:
  security_scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Xygeni Scan
        run: xygeni scan \
          --rules detect-unsafe-input \
          --fail-on-findings
        

运作方式:

  1. Xygeni 扫描不安全的 Python 用户输入。
  2. 如果找到,它将返回非零的退出代码。
  3. CI/CD 将作业标记为失败。
  4. 分支保护会阻止合并,直到问题得到解决。

这强制执行了如何在 Python 中安全、自动地获取用户输入。

最后的小贴士

永远不要相信没有经过验证的 Python 用户输入。一个不安全的 输入() 可能导致违规、部署失败或完全泄露。

行动计划:

  • 从一开始验证:  应用类型转换、白名单和库 参数解析 or 皮丹提克 在处理用户输入 Python 之前。
  • 自动检测:  配置 pipeline当发现不安全的模式时阻止合并。
  • 使用安全门强制执行:  集成 Xygeni 等工具 自动阻断 在受保护的分支中。
  • 教育你的团队:  确保每个人都知道如何在 Python 中安全地获取用户输入并了解跳过验证的风险。

应用程序安全并非始于生产;它从您编写第一行代码的那一刻就开始了。将安全输入处理设置为您的默认设置。

sca-tools-软件-成分分析工具
确定软件风险的优先级、进行补救并加以保护
7-day免费试用
无需信用卡

保护您的软件开发和交付

使用 Xygeni 产品套件