我应该在另一个可执行文件中包装启动python进程吗?

时间:2012-05-18 20:40:19

标签: asp.net python security

所以我有一个公开Python API的第三方应用程序。我有一个python脚本,它做我需要它与第三方应用程序。

python脚本只使用命令行参数,没有用户输入并写入stdout。

我正在接线,以便在ASP.NET网站上运行时启动。由于python是如此强大,我想知道从安全的角度来看是否有意义创建一个新的可执行文件,使用硬编码或本地读取(App.Config)脚本路径启动python进程并将其命令行参数复制到python进程。

这个新的可执行文件将从.NET应用程序启动,以防止攻击者上传和启动任意python代码?这会否定任何攻击向量,还是仅仅是额外的复杂性?

另外,我不能使用IronPython,因为第三方扩展只是为CPython编写的。

代码的想法:

Process p = new Process();
p.StartInfo.FileName = "python.exe";
p.StartInfo.Arguments = "goodscript.py \"" + argument1.Replace("\"","\\\"") + "\" \"" +
  argument2.Replace("\"","\\\"") + "\"";
p.Start();

我担心可能会注入像-i这样的命令行开关,或者可能会以某种方式将goodscript.py的文件路径更改为指向另一个脚本。我想如果后者可能,那么python.exe的文件路径可以改为另一个可执行文件路径。

3 个答案:

答案 0 :(得分:2)

示例代码肯定存在安全问题。我不确定Process.StartInfo是如何在那里工作的;如果它在执行子进程之前拆分参数,或者如果它使用一些shell为你做,但无论哪种方式,攻击者至少有空间在参数字符串中添加反斜杠并欺骗你的双引号转义。 / p>

如果您有其他方法单独传达参数,而不是尝试将它们打包成字符串并让其他东西将它们分开,那将更为可取。

答案 1 :(得分:1)

您的Python脚本将由网站调用。如果有人可以使用该网站使用不同的参数调用Python脚本,或者执行不同的脚本,或者其他什么,那么那是安全漏洞。它与“Python如此强大”无关,这对于调用任何语言

来说是一个安全问题

您认为将Python脚本与其他内容包装在一起并调用它会如何影响这一点?有人可以导致调用不同的可执行文件,或者使用不同的参数或不同的数据调用,在这种情况下,无论您使用何种语言,都会被搞砸。或者他们不能,在这种情况下,无论你用什么语言,你都没事。

答案 2 :(得分:0)

目前的情况是,您的脚本不仅增加了复杂性,而且实际上是一个安全漏洞。也就是说,您传递的参数是一个必须解析的字符串,而不是预先标记的字符串列表。