Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
是否可以从配置文件中插入shell/python命令?_Python_Security - Fatal编程技术网

是否可以从配置文件中插入shell/python命令?

是否可以从配置文件中插入shell/python命令?,python,security,Python,Security,假设您有一个用于python应用程序读取的自定义文件格式的元数据。类似于csv的东西,其变量可以随着文件的操作而更改: var1,data1 var2,data2 var3,data3 因此,如果用户可以操作这些元数据,您是否需要担心有人制作了一个格式错误的元数据文件,从而允许执行任意代码?如果你做了一个糟糕的选择,让var1成为一个shell命令,并在你自己的代码中执行os.sys(data1),我能想象的唯一一件事就是。另外,如果这是C,那么您将不得不担心缓冲区被破坏,但我认为您不必担心p

假设您有一个用于python应用程序读取的自定义文件格式的元数据。类似于csv的东西,其变量可以随着文件的操作而更改:

var1,data1
var2,data2
var3,data3

因此,如果用户可以操作这些元数据,您是否需要担心有人制作了一个格式错误的元数据文件,从而允许执行任意代码?如果你做了一个糟糕的选择,让
var1
成为一个shell命令,并在你自己的代码中执行
os.sys(data1)
,我能想象的唯一一件事就是。另外,如果这是C,那么您将不得不担心缓冲区被破坏,但我认为您不必担心python会破坏缓冲区。如果您以字符串形式读入该数据,是否可以以某种方式转义字符串
“\n os.sys('rm-r/”)
,这个类似SQL的示例完全不起作用,但可能存在类似的情况吗?

完全取决于文件的处理方式,但通常这应该是安全的。在Python中,如果要将文本视为代码并执行它,则必须付出一些努力。

完全取决于文件的处理方式,但通常这是安全的应该是安全的。在Python中,如果您想将文本视为代码并执行它,您必须付出一些努力。

如果您正在执行您在那里说的内容(纯文本,只是读取和解析简单的格式),您将是安全的。正如您所指出的,Python通常不会受到C开发人员可能会创建的更普通的内存损坏错误的影响,如果他们不小心的话。您注意到的SQL注入场景在简单地读取Python中的文件时不成问题

然而,如果你关心安全性,你似乎是这样(感叹词:对你有好处!一个好的程序员应该是懒惰和偏执的),这里有一些事情需要考虑:

验证所有输入。确保您读取的每段数据都具有预期的大小、类型、范围等。尽早出错,并且不要在代码中的其他地方传播受污染的变量

  • 您知道VAR的预期名称,或者至少知道它们的格式吗?请确保在使用它之前验证它是您预期的类型。如果它应该只是字母,请使用正则表达式或类似的方法确认
  • 您知道数据的预期范围或格式吗?如果您预期的是一个数字,请确保它是一个数字,然后再使用它。如果它应该是一个短字符串,请验证长度;您明白了
  • 如果你得到了意想不到的字符或字节怎么办?如果有人向你扔unicode怎么办
  • 如果其中任何一个是路径,请确保在读或写之前规范化并知道路径指向可接受的位置
一些不需要做的具体事情:

  • 操作系统(AttackerControl字符串)
  • 评估(附件控制字符串)
  • \uuuu导入(AttackerControl字符串)
  • pickle/unpickle攻击者控制的内容()

此外,与其滚动自己的配置文件格式,不如考虑或类似。一个很好理解的格式(和库)有助于您在正确的验证上得到支持。


OWASP将是我提供“进一步阅读”链接的正常选择,但他们的输入验证页面需要帮助。取而代之的是,这看起来是一个相当实用的阅读:“。如果你在做你在那里说的事情(纯文本,只是阅读和解析一个简单的格式),一个稍微过时但更特定于python的是”“

,您将是安全的。正如您所指出的,Python通常不会受到C开发人员可能会创建的更普通的内存损坏错误的影响,如果他们不小心的话。您注意到的SQL注入场景在简单地读取Python中的文件时不成问题

然而,如果你关心安全性,你似乎是这样(感叹词:对你有好处!一个好的程序员应该是懒惰和偏执的),这里有一些事情需要考虑:

验证所有输入。确保您读取的每段数据都具有预期的大小、类型、范围等。尽早出错,并且不要在代码中的其他地方传播受污染的变量

  • 您知道VAR的预期名称,或者至少知道它们的格式吗?请确保在使用它之前验证它是您预期的类型。如果它应该只是字母,请使用正则表达式或类似的方法确认
  • 您知道数据的预期范围或格式吗?如果您预期的是一个数字,请确保它是一个数字,然后再使用它。如果它应该是一个短字符串,请验证长度;您明白了
  • 如果你得到了意想不到的字符或字节怎么办?如果有人向你扔unicode怎么办
  • 如果其中任何一个是路径,请确保在读或写之前规范化并知道路径指向可接受的位置
一些不需要做的具体事情:

  • 操作系统(AttackerControl字符串)
  • 评估(附件控制字符串)
  • \uuuu导入(AttackerControl字符串)
  • pickle/unpickle攻击者控制的内容()

此外,与其滚动自己的配置文件格式,不如考虑或类似。一个很好理解的格式(和库)有助于您在正确的验证上得到支持。


OWASP将是我提供“进一步阅读”链接的正常选择,但他们的输入验证页面需要帮助。取而代之的是,这看起来是一个相当实用的阅读:“。一个稍微过时但更特定于python的是”“

谢谢,这是非常有用的信息,我实际上正在考虑使用pickle。。。那将是不幸的;你还希望有什么其他的东西能让这个答案被接受吗?谢谢,这是非常有用的信息,我实际上正在考虑使用pickle。。。那将是不幸的;你还有什么希望让这个答案被接受的吗?