跳到内容

使用 shell 启动进程 (S605)

源自 flake8-bandit linter。

作用

检查使用 shell 启动进程的调用,并提供有关使用是否安全的指导。

为什么这不好?

使用 shell 启动进程可能会引入安全风险,例如代码注入漏洞。重要的是要了解 shell 的使用是否安全。

此规则会触发诸如 os.systempopen 等使用 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 或相关函数替换此类用法。

参考