据我所知(我没有深入研究django的管理源代码,以便弄清楚)Django的管理员将GET查询参数直接转换为查询过滤条件。
我想知道,这种方法是否足够安全,可用于面向用户的应用程序?我有一个数据列表,必须接受任意WHERE子句,我正在考虑通过将GET参数转换为字典来实现它,以便它可以传递给查询集的filter()方法。
答案 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的安全修复程序,阻止用户构建任意查询过滤器。通过充分了解基础数据模型和正则表达式的使用,可以提取任意信息,例如用户的密码哈希。