Ich habe Python-Skript, das Code hat.Sanitized Eingabe für Subprozess mit Shell = True in Python
...
...
p = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
output, error = p.communicate()
...
...
Wenn ich bandit
laufen lasse, gibt es einen Fehler.
>> 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()
Dann mache ich etwas google, und stellte fest, dass ich meine Eingabe zu hygienisiert und mit shlex.split
und shlex.quote
Ich kann es sanieren.
Ich habe meinen Code geändert.
...
...
p = subprocess.Popen(shlex.split(shlex.quote(cmd)),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
output, error = p.communicate()
...
...
Aber ich immer noch denselben Fehler, gibt es eine Möglichkeit, diesen Fehler zu entfernen, wenn bandit -r mypackage/myfile.py
laufen
'bandit' kann nicht feststellen, ob das Befehlsargument ausreichend bereinigt ist; es kann nur erkennen, dass Sie 'Popen' in einer Weise verwenden, die ein Sicherheitsproblem darstellen könnte. Es ist wahrscheinlich besser, "shell = False" zu lassen und 'cmd' selbst so zu präparieren, dass es direkt von' exec' verwendet werden kann. – chepner
Ein Analysator kann nicht feststellen, ob ein Befehl, den Sie ausführen, ein Befehl ist, den Sie * ausführen wollen. Abhängig von dem, was Sie tun, Sandboxing der Interpreter (zum Beispiel mit [codejail] (https://github.com/edx/codejail)) möglicherweise angemessen oder notwendig. Dies beinhaltet eine Kombination aus Eingabe-Sanitisierung und streng kontrollierten Betriebssystemberechtigungen. – gecko
@chepner, 'exec' bedeutet,' subprocess.exec'? – Nilesh