0

所以我有一个公开 Python API 的第 3 方应用程序。我有一个 python 脚本,它可以完成我需要它来处理那个 3rd 方应用程序。

python 脚本仅使用命令行参数,没有用户输入并写入标准输出。

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

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

另外,我不能使用 IronPython,因为第 3 方扩展仅是为 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 的文件路径实际上可以更改为另一个可执行文件路径。

4

3 回答 3

2

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

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

于 2012-05-18T21:16:31.923 回答
1

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

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

于 2012-05-19T02:55:58.070 回答
0

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

于 2012-05-19T02:46:58.683 回答