2017-11-11 72 views
1

对不起,如果这个问题已经得到解答,但我似乎无法找到解决方案。 (关于一般设置文件的许多问题,甚至一些提到这个问题,但没有解决它)如何确保设置文件在Python中是安全的?

我有一个Python程序将运行一个Powershell脚本作为子进程。 (Python处理图形用户界面,Powershell做烦人的工作来安排任务等)

我的查询是否有一个安全的方式来有一个设置文件,其中包含可以加载到Python的Powershell脚本的参数,是耐恶意代码注入?我能想到的唯一方法就是加密设置文件,这很好,但是您无法在不通过GUI的情况下快速更改设置。有没有一个聪明的方法来解决这个问题?

当调用Powershell的我用的是简单的:

subprocess.Popen(['powershell.exe', args], 
        stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

或许有这样做盾反ARGS其中具有意想不到的代码的更好的办法?

任何答案非常感谢!谢谢! :d

回答

3

正确的方式,以确保您的设置文件是安全的保存配置而不是代码参数。 (对于powershell.exe参数基本上代码)

在你的配置文件中存储的PowerShell参数的原因有两个是错误的:

  1. 这是容易发生代码注入。
  2. 这听起来像Powershell不是你的程序的重要组成部分;这是一个实现细节。如果你曾经决定用别的工具代替Powershell,你的配置文件就没用了。

取而代之,您应该存储数据。数据无疑只是数据,而不是任何形式或形式的代码。然后,您可以从此数据创建一个适当的powershell命令,如果需要时。

例如,不应保存powershell参数sleep 3; echo Hello,而只应保存重建此powershell命令所需的值。一个选择会是这样一个JSON文件:

{ 
    "delay": 3, 
    "text_to_display": "Hello" 
} 

您可以轻松地从这些数值重建命令sleep 3; echo Hello,如果有人修改了你的配置文件没有什么危险都可能发生,因为它不是代码。 (当你将它们转换成代码只要你壳逃避这些值。)


在你实际上必须存储在您的配置文件中的代码极少数情况下(例如,因为你写一个任务调度程序),你基本上运气不好。您可以尝试通过加密配置文件来使代码注入变得更加困难,但最终这对攻击者来说只是一个烦恼,并且不提供任何真正的安全性(除非让用户选择密码,但是必须每次使用您的程序时提示用户输入密码)。

如果您将代码存储在配置文件中,您必须忍受相关的代码注入危险。确保你和你的用户知道风险。