编写安全代码简短评论:是很困难的。当你学习一门编程语言,模块或框架,您将学习如何使用它。当考虑到安全,您需要考虑如何避免滥用。Python也不例外。即使在标准库,有不好的实践编写应用程序。然而,许多Python开发人员不知道他们。1. 输入注射注射(输入)注入攻击是非常广泛和普遍。有许多类型的注射,他们影响所有语言,框架和环境。命令注入可能发生当使用popen、子流程调用过程和参数的变量。当调用本地命令,有人可能会设置一些值作为恶意。以下是一个简单的脚本,它使用用户提供的文件名调用子流程:进口subprocessdef transcode_file(请求,文件名):命令=的ffmpeg我\u201C{来源}\u201Doutput_ .
攻击者将文件名的价值\u201D;猫\/ etc \/ passwd |邮件或其他同样危险的事情。解决办法:如果你使用一个web框架,您可以使用附加的实用程序输入清理,除非你有一个很好的理由,不要手动构建SQL查询,大多数orm内置卫生处理方法。对于shell,您可以使用shlex模块逃离输入正确。2. 不要使用断言语句断言语句(assert语句),以防止用户访问不应该访问的代码段。def foo(请求、用户):维护_admin,\u201C用户没有访问\u201D#安全代码\u2026现在,在默认情况下,Python执行脚本和调试是真实的。但是在生产环境中,通常使用优化操作,将跳过断言语句,直接进入安全的代码,无论用户是is_admin。
3.计时攻击时机攻击基本上是公开行为的方法和算法通过比较提供所需的时间值。计时攻击需要准确性,所以通常在高延迟远程网络不能使用。因为大多数web应用程序涉及变量延迟,这几乎是不可能写出计时攻击HTTP web服务器。然而,如果你有一个命令行应用程序提示输入密码,攻击者可以编写一个简单的脚本计算所需的时间来比较其值与实际密码。解决办法:使用Python中引入_digest比较与其他私人密码值。4. 临时文件(临时文件)来创建一个临时文件在Python中,通常使用mktemp()函数来生成一个文件名,然后使用该名称来创建一个文件。\u201C这是不安全的,因为另一个进程可能创建一个具有相同名称的文件之间的差距调用mktemp()和后续尝试创建文件通过第一个过程。
如果不正确的方法被调用时,Python的最新版本将抛出一个运行时警告。解决办法:如果你需要生成临时文件,请使用和使用mkstemp tempfile模块。5. 使用引用PyYAML文档:警告:不安全使用来自不受信任的源的数据调用!它是那么强大,所以任何Python函数可以调用。对于这个美丽的例子中发现Ansible流行的Python项目,你可以提供这个值Ansible拱顶YAML(有效),电话()的参数提供的文件。[\解决办法:总是使用_load除非你有一个非常好的理由。