django - 允许输入任意用户输入的数据到filter() - 这是安全的吗?

时间:2010-11-29 20:24:59

标签: django orm

据我所知(我没有深入研究django的管理源代码,以便弄清楚)Django的管理员将GET查询参数直接转换为查询过滤条件。

我想知道,这种方法是否足够安全,可用于面向用户的应用程序?我有一个数据列表,必须接受任意WHERE子句,我正在考虑通过将GET参数转换为字典来实现它,以便它可以传递给查询集的filter()方法。

2 个答案:

答案 0 :(得分:3)

输入将被转义,因此不会有SQL注入攻击或任何类似的攻击。但是,对于您要搜索的字段,输入可能无效。或者根本没有任何意义,所以做一些形式的验证是个好主意(比如输入日期必须大于其他日期,输入值必须小于X等)

但是,如果要将从用户收到的数据显示为页面的一部分,则需要确保正确转义它。 Documentation on the autoescape tag

答案 1 :(得分:0)

我认为正确答案是“不,这不安全”

http://www.djangoproject.com/weblog/2010/dec/22/security/

Django刚刚发布了1.2.4和1.3b1的安全修复程序,阻止用户构建任意查询过滤器。通过充分了解基础数据模型和正则表达式的使用,可以提取任意信息,例如用户的密码哈希。