我有一个经理.py使用.extra()参数执行原始SQL查询的文件。例如:
class MyManager(models.Manager):
def order_null_last(self, field):
return super(DecisionManager, self).get_query_set()\
.extra(select={'has_field': "CASE WHEN " + field + " IS NULL THEN 1 ELSE 0 END"}).order_by('has_field', field)
有人告诉我,这种查询很容易受到注入攻击。在
对变量“field”进行了分析,以确保它属于一组合法值,但此检查是在视图中完成的。例如:
^{pr2}$因此,如果有人使用上面的管理器编写了一个新视图,但是他们忘记了过滤参数,那么利用漏洞是可能的。在
那么,有没有一种方法可以在不获取循环导入的情况下根据管理器中的模型字段验证参数吗?也就是说,管理器需要导入模型以获取允许字段的列表,但是模型需要导入管理器。在
模型管理器可以访问模型,因此可以通过自我模型. 在
所以我可以写下:
类MyManager(模特。经理)公司名称:
在extra中使用select_params可避免sql注入:
相关问题 更多 >
编程相关推荐