【发布时间】:2019-12-09 03:00:11
【问题描述】:
根据this:
在上一节中,我们看到
os.system()函数工作正常。但不推荐执行 shell 命令的方式。我们将使用 Python 子进程模块来执行系统命令。
作者从未在他/她的帖子中提到为什么os.system() 不是推荐的方式。我可以知道为什么不推荐它吗?
os.system() 中是否有任何安全漏洞导致不推荐执行 shell 命令?
【问题讨论】:
标签: python
根据this:
在上一节中,我们看到
os.system()函数工作正常。但不推荐执行 shell 命令的方式。我们将使用 Python 子进程模块来执行系统命令。
作者从未在他/她的帖子中提到为什么os.system() 不是推荐的方式。我可以知道为什么不推荐它吗?
os.system() 中是否有任何安全漏洞导致不推荐执行 shell 命令?
【问题讨论】:
标签: python
os.system 只接受一个包含 shell 命令的字符串作为参数。这要求用户在运行所需的命令之前了解 shell 将如何处理字符串。
来自它自己的文档:
子流程模块提供了更强大的工具来生成新流程并检索其结果;使用该模块优于使用此功能。有关一些有用的秘诀,请参阅子流程文档中的用子流程模块替换旧功能部分。
【讨论】:
os.system() 中是否有任何安全漏洞导致不推荐使用 shell 命令执行方式?
os.system("someCommand " + argument) 这样的命令字符串。这为您打开了代码注入的可能性,因为argument 不是someCommand 的单个参数;它是任意代码,当与someCommand 结合使用时,会形成一个shell 必须解析的命令行。 subprocess.Popen(["someCommand", argument]) 符合您的期望和意图:它使用单个参数运行 someCommand。