我理解为什么如果你有不受信任的输入,使用'shell = True'可能会带来安全风险.但是,我不明白'shell = False'是如何避免同样的风险的.
假设我想允许用户提供他可能输入的输入:var ="rm -rf /"
我的代码可能只是:
subprocess.call(var,shell=True) # bad stuff
Run Code Online (Sandbox Code Playgroud)
或者我可能会这样做:
varParts=var.split()
subprocess.call(varParts,shell=False) # also bad, right?
Run Code Online (Sandbox Code Playgroud)
看起来这个假设是不会像第二个例子那样经历处理输入的麻烦,因此这会/不可能发生?
使用shell=False,args[0]是要执行的程序,并args[1:]作为参数传递给该程序.
所以,例如,
subprocess.call(['cat','nonexistent;','rm','-rf'])
Run Code Online (Sandbox Code Playgroud)
调用cat程序和发送3串'nonexistent;','rm','-rf'作为参数cat.这是非常安全的,虽然无效,因为-r它是无效选项cat.
但是,任意用户输入仍然可能不安全.例如,如果您允许用户控制要调用的程序,例如
subprocess.call(['rm','-rf'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3206 次 |
| 最近记录: |