Django SQL注入漏洞
一、漏洞简介
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。
Django 组件存在 SQL 注入漏洞,该漏洞是由于对 QuerySet.order_by()中用户提供数据的过滤不足,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行 SQL 注入攻击,最终造成服务器敏感信息泄露。
二、漏洞影响
影响版本
Django 3.2
Django 3.1
安全版本
Django >= 3.2.5
Django >= 3.1.13
三、产生原因
在Django中,想要在数据库中创建表并定义字段是容易的,只需要在models.py文件中声明一个模型类即可。
Django内置了一个ORM框架,从数据库查询出来的结果是一个合集,这个合集就是QuerySet。而order_by这个方法的作用,一般是将查询出来的结果按照某字段的值,由小到大或由大到小进行排序。在views.py的视图函数中,先是获取到了用户传入的参数值order(如果没有传入参数默认值为id)。然后到Collection表中进行数据查询,对返回的结果按照id值从小到大进行排序。
最后使用values()函数将数据合集转化成一个一个json的数据格式返回。
比如返回的结果按照id值排序Collection.objects.order_by(‘id’),默认是从小到大的顺序。如果想要变成从大到小,只需要把’id’变成’-id’即可。因此可以通过在参数值前面加’-'来判断,如果返回的顺序颠倒了那么就是使用了order_by。