Защищены ли объекты Django Q (сложные запросы)?

Кажется, я не могу найти никаких ресурсов, объясняющих безопасность встроенных в 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. Вот ссылка на то, что происходит в этом случае.

В общем, Django защищает вас от атак SQL-инъекций. Вот их страница безопасности. Обратите внимание, что вы можете столкнуться с проблемами, выполняя пользовательский SQL или небрежно используя "extra", но в противном случае вы защищены.

Другие вопросы по тегам