如何确保设置文件在 Python 中是安全的?
How to ensure a settings file is secure in Python?
如果这个问题已经得到解答,我很抱歉,但我似乎找不到解决方案。 (关于一般设置文件的许多问题,甚至有些人提到了这个问题,但 none 解决了它)
我有一个 Python 程序,它将 运行 一个 Powershell 脚本作为子进程。 (Python 处理 GUI,Powershell 执行繁重的工作以安排任务等)
我想问的是,是否有一种安全的方法可以使包含 Powershell 脚本参数的设置文件可以加载到 Python 并且能够抵抗恶意代码注入?我能想到的唯一方法是加密设置文件,这很好,但这样你就无法在不通过 GUI 的情况下快速更改设置。有解决这个问题的聪明方法吗?
调用 Powershell 时我使用简单的:
subprocess.Popen(['powershell.exe', args],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
也许有更好的方法来避免 args 中包含意外代码?
非常感谢任何答案!谢谢! :D
确保设置文件安全的正确方法是保存配置而不是代码或参数。 (powershell.exe
的参数本质上是代码。)
在你的配置文件中存储 powershell 参数是错误的,原因有二:
- 容易被代码注入
- 听起来 Powershell 不是您程序的重要组成部分;这是一个实现细节。如果您决定将 powershell 替换为其他可以完成繁重工作的东西,您的配置文件将毫无用处。
相反,您应该存储 数据。毫无疑问,数据只是数据,而不是任何形状或形式的代码。然后,如果需要,您可以根据此数据创建 适当的 powershell 命令。
例如,不应保存 powershell 参数 sleep 3; echo Hello
,而应仅保存重建此 powershell 命令所需的值。一种选择是像这样的 JSON 文件:
{
"delay": 3,
"text_to_display": "Hello"
}
您可以从这些值轻松重构命令 sleep 3; echo Hello
,如果有人修改您的配置文件,也不会发生任何危险,因为它不是 code。 (只要您在将这些值转换为代码时 shell-转义这些值。)
在极少数情况下,您 实际上 必须将代码存储在您的配置文件中(例如,因为您正在编写任务调度程序),您基本上运气不好.您可以尝试通过加密配置文件来使代码注入更加困难,但最终这对攻击者来说只是一种烦恼,并且它没有提供任何真正的安全性(除非您让用户选择密码,但随后您必须每次用户使用您的程序时都会提示用户输入密码。
如果您曾将代码存储在配置文件中,则必须忍受代码注入的相关危险。确保您和您的用户了解风险。
如果这个问题已经得到解答,我很抱歉,但我似乎找不到解决方案。 (关于一般设置文件的许多问题,甚至有些人提到了这个问题,但 none 解决了它)
我有一个 Python 程序,它将 运行 一个 Powershell 脚本作为子进程。 (Python 处理 GUI,Powershell 执行繁重的工作以安排任务等)
我想问的是,是否有一种安全的方法可以使包含 Powershell 脚本参数的设置文件可以加载到 Python 并且能够抵抗恶意代码注入?我能想到的唯一方法是加密设置文件,这很好,但这样你就无法在不通过 GUI 的情况下快速更改设置。有解决这个问题的聪明方法吗?
调用 Powershell 时我使用简单的:
subprocess.Popen(['powershell.exe', args],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
也许有更好的方法来避免 args 中包含意外代码?
非常感谢任何答案!谢谢! :D
确保设置文件安全的正确方法是保存配置而不是代码或参数。 (powershell.exe
的参数本质上是代码。)
在你的配置文件中存储 powershell 参数是错误的,原因有二:
- 容易被代码注入
- 听起来 Powershell 不是您程序的重要组成部分;这是一个实现细节。如果您决定将 powershell 替换为其他可以完成繁重工作的东西,您的配置文件将毫无用处。
相反,您应该存储 数据。毫无疑问,数据只是数据,而不是任何形状或形式的代码。然后,如果需要,您可以根据此数据创建 适当的 powershell 命令。
例如,不应保存 powershell 参数 sleep 3; echo Hello
,而应仅保存重建此 powershell 命令所需的值。一种选择是像这样的 JSON 文件:
{
"delay": 3,
"text_to_display": "Hello"
}
您可以从这些值轻松重构命令 sleep 3; echo Hello
,如果有人修改您的配置文件,也不会发生任何危险,因为它不是 code。 (只要您在将这些值转换为代码时 shell-转义这些值。)
在极少数情况下,您 实际上 必须将代码存储在您的配置文件中(例如,因为您正在编写任务调度程序),您基本上运气不好.您可以尝试通过加密配置文件来使代码注入更加困难,但最终这对攻击者来说只是一种烦恼,并且它没有提供任何真正的安全性(除非您让用户选择密码,但随后您必须每次用户使用您的程序时都会提示用户输入密码。
如果您曾将代码存储在配置文件中,则必须忍受代码注入的相关危险。确保您和您的用户了解风险。