私はコードを持つpythonスクリプトを持っています。pythonでシェル= Trueのサブプロセスのサニタイズ入力
...
...
p = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
output, error = p.communicate()
...
...
bandit
を実行するとエラーになります。
>> Issue: [B602:subprocess_popen_with_shell_equals_true] subprocess call with shell=True identified, security issue.
Severity: High Confidence: High
Location: mypackage/myfile.py:123
123 stderr=subprocess.PIPE,
124 shell=True)
125 output, error = p.communicate()
それから私はいくつかのグーグルを行う、と私は私の入力を消毒するとshlex.split
とshlex.quote
で、私はそれをサニタイズすることができます持っている、ことを見出しました。
私のコードを変更しました。だから、
'bandit'は、コマンドの引数が十分に消されているかどうかを判断できません。セキュリティ上の問題である可能性のある方法で 'Popen'を使用していることを検出することしかできません。おそらく 'shell = False'を残し、' exec'によって直接使用できる方法で 'cmd'を自分自身で準備する方がよいでしょう。 – chepner
アナライザは、実行しているコマンドが実行したいコマンドであるかどうかを判断できません。あなたがやっていることに応じて、([codejail](https://github.com/edx/codejail)を使って)intepreterをサンドボックス化するのが適切かもしれません。これには、入力サニタイズと緊密に制御されたオペレーティングシステムのアクセス許可の組み合わせが含まれます。 – gecko
@chepner、 'exec'は' subprocess.exec'を意味しますか? – Nilesh