如何确保Python中的设置文件安全?

时间:2017-11-11 10:58:28

标签: python powershell security subprocess settings

对不起,如果这个问题已经得到解答,但我似乎无法找到解决方案。 (关于设置文件的一般问题很多,甚至有些人提到这个问题,但都没有解决它)

我有一个Python程序,它将作为子进程运行Powershell脚本。 (Python处理GUI,Powershell执行繁琐的工作以安排任务等)。

我的疑问是,是否有一种安全的方法可以获得包含Powershell脚本参数的设置文件,该脚本可以加载到Python中并且可以抵御恶意代码注入?我能想到的唯一方法是加密设置文件,这很好,但是你无法通过GUI快速更改设置。有没有一种聪明的方法可以解决这个问题?

调用Powershell时我会使用简单的:

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

也许有一种更好的方法可以防止 args 中出现意外代码?

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

1 个答案:

答案 0 :(得分:3)

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

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

  1. 它易于代码注入。
  2. 听起来Powershell不是您计划的重要组成部分;它是一个实现细节。如果您决定将powershell替换为执行grunt工作的其他内容,那么您的配置文件将毫无用处。
  3. 相反,您应该存储数据。数据无疑只是数据,而不是任何形式或形式的代码。然后,您可以根据需要从此数据中创建适当的powershell命令。

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

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

    您可以轻松地从这些值重建命令sleep 3; echo Hello,如果有人修改了您的配置文件,则不会发生任何危险,因为它不是代码。 (只要在将它们转换为代码时shell转义这些值。)

    在极少数情况下,您实际必须在配置文件中存储代码(例如,因为您正在编写任务计划程序),您基本上没有运气。您可以尝试通过加密配置文件来使代码注入更加困难,但最后这只会给攻击者带来麻烦,并且它不会提供任何真正的安全性(除非您让用户选择密码,但是每次他们使用你的程序时你都必须提示用户输入密码。)

    如果您将代码存储在配置文件中,则必须承担代码注入的相关危险。确保您和您的用户了解风险。