Django Q 对象(复杂查询)是不是安全?
Posted
技术标签:
【中文标题】Django Q 对象(复杂查询)是不是安全?【英文标题】:Are Django Q objects (complex queries) secure?Django Q 对象(复杂查询)是否安全? 【发布时间】:2015-01-22 20:36:26 【问题描述】:我似乎找不到任何资源来解释 Django 内置复杂查询(Q 对象或 F 对象)的安全性。是否可以在这些查询中注入 SQL 攻击?我做了一个小测试:
from models import *
from django.db.models import Q
q = MyModel.objects.filter(Q(mycolumn__contains='%; DROP DATABASE mydatabase;'))
print q
>>> []
print q.query
>>> SELECT `mydatabase_mytable`.`mycolumn` FROM `mydatabase_mytable` WHERE
`mydatabase_mytable`.`mycolumn` LIKE BINARY %\%; DROP DATABASE mydatabase;%
这似乎并没有删除我的数据库。这是怎么回事?
【问题讨论】:
【参考方案1】:从 SQL 中可以看出,Django 正在转义 LIKE 子句。 Here 是对在这种情况下发生的事情的引用。
一般来说,Django 确实可以保护您免受 SQL 注入攻击。 Here 是他们的安全页面。请注意,执行自定义 SQL 或不小心使用“extra”可能会遇到麻烦,否则,您会受到保护。
【讨论】:
使用extra()
,或者直接使用带有原始SQL的底层连接/游标。以上是关于Django Q 对象(复杂查询)是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中使用 Q() 动态构建复杂查询 [关闭]
Django get_next_by_FIELD 使用复杂的 Q 查找
Django Q AND 查找 - 在复杂查找中查询多个条目