我似乎找不到任何资源来解释 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;%
不过,这似乎并没有删除我的数据库。这里发生了什么?