【问题标题】: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;% 

这似乎并没有删除我的数据库。这是怎么回事?

【问题讨论】:

    标签: python sql django security django-q


    【解决方案1】:

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

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

    【讨论】:

    • 使用extra(),或者直接使用带有原始SQL的底层连接/游标。
    猜你喜欢
    • 2011-02-12
    • 2015-06-23
    • 2010-12-27
    • 2014-02-06
    • 2015-07-15
    • 2021-05-27
    • 2016-02-02
    • 2021-09-15
    • 2013-12-11
    相关资源
    最近更新 更多