Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 我应该在另一个可执行文件中包装启动python进程吗?_Asp.net_Python_Security - Fatal编程技术网

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

Asp.net 我应该在另一个可执行文件中包装启动python进程吗?,asp.net,python,security,Asp.net,Python,Security,所以我有一个第三方应用程序,它公开了一个Python API。我有一个python脚本,它完成了我需要它对第三方应用程序所做的事情 python脚本只使用命令行参数,不使用用户输入并写入标准输出 我将在运行时从一个ASP.NET网站上启动它。由于python功能强大,我想知道从安全角度来看,创建一个新的可执行文件,用硬编码或本地读取(App.Config)脚本路径启动python进程,并将其命令行参数复制到python进程是否有意义 这个新的可执行文件将从.NET应用程序启动,以防止攻击者上载和

所以我有一个第三方应用程序,它公开了一个Python API。我有一个python脚本,它完成了我需要它对第三方应用程序所做的事情

python脚本只使用命令行参数,不使用用户输入并写入标准输出

我将在运行时从一个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的文件路径确实可以更改为另一个可执行文件路径。

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


如果您有其他方法来单独传递参数,而不是尝试将它们打包成字符串并让其他东西来解析它们,那么这将是更好的选择。

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


如果您有其他方法来单独传递参数,而不是尝试将它们打包成字符串并让其他东西来解析它们,那么这将是更好的选择。

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

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

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


您认为用其他东西包装Python脚本并调用它会对其产生怎样的影响?有人可能会导致调用不同的可执行文件,或者使用不同的参数或对不同的数据进行调用,在这种情况下,无论调用哪种语言,都会出错。或者他们不能,在这种情况下,无论您调用哪种语言,您都很好。

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


您认为用其他东西包装Python脚本并调用它会对其产生怎样的影响?有人可能会导致调用不同的可执行文件,或者使用不同的参数或对不同的数据进行调用,在这种情况下,无论调用哪种语言,都会出错。或者他们不能,在这种情况下,无论您使用何种语言,您都可以。

我们需要查看实际的代码才能确定,但这听起来似乎是额外的复杂性。@在尝试多次尝试hi \“cmd”或hi \“cmd”等用户数据后,我添加了一些代码进行澄清,似乎所有参数都被发送到python.exe,而不是在命令行上求值。我们需要查看实际代码才能确定,但这听起来似乎太复杂了。@保罗我添加了一些代码以澄清在尝试多次尝试用户数据(如hi \“cmd”或hi \“cmd”)之后,似乎所有参数都被发送到python.exe,而不是在命令行上求值。我尝试了hi \“cmd或hi \”| cmd或hi等变体\\“&cmd但这一切似乎只适用于python,而不是像纯shell命令那样执行,有没有关于如何打破参数字符串的其他想法?是的,如果它不是由shell解释的,那么可能不会有以这种方式调用其他命令的危险,这很好。另一方面,在不知道规则的情况下,很难确定危险是什么。可以肯定的是,攻击者仍然有可能改变参数的分离方式,引入额外的参数,等等。在您的情况下,这可能不是一个问题,但同样可能,即使看起来不是这样。这些事情可能非常微妙。我尝试过像hi \“cmd或hi \“| cmd或hi\\\”&cmd这样的变体,但这一切似乎都是由python完成的,而不是像纯shell命令那样执行的,还有什么其他方法可以打破参数字符串吗?是的,如果