4

我似乎找不到任何资源来解释 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;% 

不过,这似乎并没有删除我的数据库。这里发生了什么?

4

1 回答 1

5

从 SQL 中可以看出,Django 正在转义 LIKE 子句。是对在这种情况下发生的事情的参考。

一般来说,Django 确实可以保护您免受 SQL 注入攻击。是他们的安全页面。请注意,执行自定义 SQL 或不小心使用“extra”可能会遇到麻烦,但否则,您会受到保护。

于 2014-11-25T00:24:24.697 回答