跳到内容

不使用 shell 启动进程 (S606)

源自 flake8-bandit linter。

作用

检查不使用 shell 启动进程的函数。

为什么这不好?

如果任意变量被传递给可执行文件,或者输入没有经过清理或验证,则通过函数调用调用任何类型的外部可执行文件都可能构成安全风险。

此规则专门标记 os 模块中生成子进程而不使用 shell 的函数。请注意,与使用 shell 启动的子进程相比,这些函数通常带来的安全风险要小得多,后者会被 start-process-with-a-shell (S605) 标记。如果您认为这些函数带来的安全风险对于您的用例是可以接受的,则可以选择启用一条规则,同时禁用另一条规则。

示例

import os


def insecure_function(arbitrary_user_input: str):
    os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", arbitrary_user_input)