ホームページ >バックエンド開発 >Python チュートリアル >セキュリティリスクを冒さずに変数を安全に「subprocess.Popen()」に渡すにはどうすればよいでしょうか?

セキュリティリスクを冒さずに変数を安全に「subprocess.Popen()」に渡すにはどうすればよいでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-02 19:17:10628ブラウズ

How Can I Safely Pass Variables to `subprocess.Popen()` Without Security Risks?

Subprocess.Popen() での変数受け渡しの落とし穴を克服する

多くのスクリプトでは、引数を指定して外部プログラムを呼び出す必要が生じます。これらの引数が変数に格納されている場合、subprocess.Popen() で問題が発生する可能性があります。単純そうに見えるかもしれませんが、このプロセスは特定の落とし穴によって妨げられる可能性があります。

そのような落とし穴の 1 つは、shell=True を使用するときに発生します。このオプションは、Unix システムでは引数の処理が異なるため、予期しない動作が発生します。この課題を解決するには、shell=True をドロップすることをお勧めします。

例:

次のシナリオを考えてみましょう:

import subprocess

# Populate a list of arguments
args = ["mytool.py"]
for opt, optname in zip("-a -x -p".split(), "address port pass".split()):
    args.extend([opt, str(servers[server][optname])])
args.extend("some additional command".split())

# Run the script without shell=True
p = subprocess.Popen([sys.executable or 'python'] + args, stdout=subprocess.PIPE)

このアプローチでは、引数が処理されます。正確に、外部プログラムが意図した入力を受信できるようにします。

セキュリティ考慮事項:

外部入力を伴うコマンドに対してshell=Trueを設定すると、セキュリティ上の危険が生じることに注意することが重要です。サブプロセスのドキュメントで説明されているように、この方法を実行すると、スクリプトが潜在的な脆弱性にさらされる可能性があります。

以上がセキュリティリスクを冒さずに変数を安全に「subprocess.Popen()」に渡すにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。