对不起,如果这个问题已经得到解答,但我似乎无法找到解决方案。 (关于设置文件的一般问题很多,甚至有些人提到这个问题,但都没有解决它)
我有一个Python程序,它将作为子进程运行Powershell脚本。 (Python处理GUI,Powershell执行繁琐的工作以安排任务等)。
我的疑问是,是否有一种安全的方法可以获得包含Powershell脚本参数的设置文件,该脚本可以加载到Python中并且可以抵御恶意代码注入?我能想到的唯一方法是加密设置文件,这很好,但是你无法通过GUI快速更改设置。有没有一种聪明的方法可以解决这个问题?
调用Powershell时我会使用简单的:
subprocess.Popen(['powershell.exe', args],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
也许有一种更好的方法可以防止 args 中出现意外代码?
非常感谢任何答案!谢谢! :d
答案 0 :(得分:3)
确保设置文件安全的正确方法是保存配置而不是代码或参数。 (powershell.exe
的参数基本上是代码。)
在配置文件中存储powershell参数是错误的,原因有两个:
相反,您应该存储数据。数据无疑只是数据,而不是任何形式或形式的代码。然后,您可以根据需要从此数据中创建适当的powershell命令。
例如,您应该只保存重建此powershell命令所需的值,而不是保存powershell参数sleep 3; echo Hello
。一个选项是像这样的JSON文件:
{
"delay": 3,
"text_to_display": "Hello"
}
您可以轻松地从这些值重建命令sleep 3; echo Hello
,如果有人修改了您的配置文件,则不会发生任何危险,因为它不是代码。 (只要在将它们转换为代码时shell转义这些值。)
在极少数情况下,您实际必须在配置文件中存储代码(例如,因为您正在编写任务计划程序),您基本上没有运气。您可以尝试通过加密配置文件来使代码注入更加困难,但最后这只会给攻击者带来麻烦,并且它不会提供任何真正的安全性(除非您让用户选择密码,但是每次他们使用你的程序时你都必须提示用户输入密码。)
如果您将代码存储在配置文件中,则必须承担代码注入的相关危险。确保您和您的用户了解风险。