Pythonでのユーザー入力 - Pythonでのユーザー入力 - Pythonでユーザー入力を取得する方法

Pythonでユーザー入力を取得する間違った方法(そして安全な代替方法)

   入力() うまくいかない

あるPythonのデプロイスクリプトがコンソールコマンドの入力を求めてきた際、入力ミスによって誤った操作が実行され、本番環境へのビルドが失敗してしまったことがあった。 Pythonのユーザー入力には、このような危険性があります。たった1つの未検証の文字列が、インジェクション、データ損失、またはロジックバイパスを引き起こす可能性があるのです。なぜこのようなことが起こるのか、そしてオープンソースプロジェクトと社内プロジェクトの両方で、Pythonのユーザー入力を安全に処理する方法を詳しく見ていきましょう。

問題点 ユーザー入力() Python

その 入力() Pythonの関数は単純です。コンソールからテキストを読み込み、文字列として返します。検証もチェックもありません。 単独で見れば、それは無害に思える。しかし、制作脚本では、 CI/CD ジョブや自動化ツールにおいて、生のPythonユーザー入力をコマンドや関数に直接渡すと、脆弱性が生じる可能性があります。

⚠️ 教育目的の例示のみであり、機能的または悪用可能なものではありません。

Pythonでユーザー入力を安全に取得する方法を知りたいなら、答えは簡単です。決して盲目的に信頼してはいけません。

DevSecOpsにおけるリスクと安全な取り扱い Pipelines

安全でないPythonユーザー入力は、さまざまな ソフトウェアライフサイクルの段階:

  • CI/CD スクリプト 成果物をデプロイまたは構築する
  • 内部開発者ツール 環境を制御する
  • 第三者への統合 入力が安全であることを前提としている。

依存関係が検証なしでユーザー入力をPythonで処理する場合、たとえコードが安全であっても、そのリスクを継承することになります。そのため、検証は一貫して強制する必要があります。 pipeline.

例: pipeline リスク:

予防的 CI/CD 執行:

重要なポイント: Pythonでユーザー入力を安全に取得する方法を知ることは、仕事の半分に過ぎません。自動化された強制により、 安全でないコードは決して本番環境に到達しない。

一般的な攻撃ベクトル

安全性の低いPythonユーザー入力は、「不正なデータ」以上の問題を引き起こす可能性があります。一般的なリスクには以下のようなものがあります。

論理バイパス認証をスキップしたり、細工された入力によってフローを変更したりする。

Pythonで生のユーザー入力に依存すると、ユーザーまたは攻撃者に制御を委ねることになります。

安全な代替手段:入力の検証とサニタイズ

目標は取り除くことではない 入力() すべてのコードにおいて、Pythonのユーザー入力が重要な操作に影響を与える前に検証されることを保証するためです。

Pythonでユーザー入力を取得する最も安全な方法は以下のとおりです。

  • 型チェックを強制する
  • 許可された値に対してホワイトリストを適用する
  • 次のような安全な解析ライブラリを使用します 引数解析 (NAIST) と ピダンティック.

クイック比較

シナリオ 不安定な例 安全な例
直接使用 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安全でない入力処理が検出された場合、セキュリティジョブは失敗となります。この問題が解決されるまで、保護されたブランチへのマージはブロックされます。

シナリオ 不安定な例 安全な例
直接使用 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のユーザー入力は検証なしに決して信用してはいけません。たった1つの安全でない入力でも、 入力() 情報漏洩、展開の失敗、あるいは完全な侵害につながる可能性があります。

行動計画:

  • 最初から検証する:  型変換、ホワイトリスト、ライブラリなどを適用する 引数解析 or ピダンティック ユーザー入力を処理する前に、Pythonを使用します。
  • 検出を自動化する:  configure pipeline安全でないパターンが見つかった場合にマージをブロックします。
  • セキュリティゲートで対策を講じる:  Xygeniなどのツールを統合して 自動ブロック 保護された枝の中で。
  • チームを教育する:  全員がPythonでユーザー入力を安全に取得する方法を理解し、検証を省略することのリスクを理解していることを確認する。

アプリケーションセキュリティは本番環境から始まるものではない最初のコードを書いた瞬間から、安全な入力処理がデフォルトになります。

sca-tools-ソフトウェア構成分析ツール
ソフトウェアのリスクを優先順位付けし、修復し、保護する
無料アカウントを作成しましょう。
いいえ、クレジットカードは必要ありません。

ソフトウェア開発と納品を安全に

Xygeni製品スイートと共に