不通过外壳调用的好处是你没有在调用“神秘程序”。在POSIX上,环境变量SHELL控制哪个二进制文件作为“外壳”被调用。在Windows上,没有
bourne shell后代,只有
cmd.exe。
因此,调用外壳程序将调用用户选择的程序,并且该程序与平台有关。一般来说,避免通过外壳调用。
通过shell调用确实允许你根据shell的通常机制扩展环境变量和文件glob。在POSIX系统上,shell将文件全局扩展为文件列表。在Windows上,无论如何,shell都不会扩展文件glob(例如
“ *。*”)(但是cmd.exe 会扩展命令行上的环境变量)。
如果你认为需要环境变量扩展和文件文件,请研究
ILS1992-ish对通过外壳执行子程序调用的网络服务的攻击。示例包括sendmail涉及的各种后门ILS。
总之,请使用
shell=False。



