使用 shell 启动进程 (S605)
源自 flake8-bandit linter。
作用
检查使用 shell 启动进程的调用,并提供有关使用是否安全的指导。
为什么这不好?
使用 shell 启动进程可能会引入安全风险,例如代码注入漏洞。重要的是要了解 shell 的使用是否安全。
此规则会触发诸如 os.system
、popen
等使用 shell 启动进程的函数。它会评估提供的命令是字面字符串还是表达式。如果命令是字面字符串,则认为它是安全的。如果命令是一个表达式,则认为它是(潜在地)不安全的。
示例
import os
# Safe usage (literal string)
command = "ls -l"
os.system(command)
# Potentially unsafe usage (expression)
cmd = get_user_input()
os.system(cmd)
注意
subprocess
模块为生成新进程和检索其结果提供了更强大的功能,并且使用该模块优于使用 os.system
或类似函数。考虑用 subprocess.call
或相关函数替换此类用法。