您好我正在手动实现API过滤器,用户可以过滤数据库,
其中一个查询看起来像这样,
book/?writer=Anonymous
其中作者通过HTML表单(不是Django表单)的GET请求传递。
查找方法是,
def list(self, request, *args, **kwargs):
if request.GET.dict():
keys = request.GET.dict()
if 'writer' in keys:
queryset = Book.objects.filter(writer__name__contains=keys['writer'])
# serialize queryset if queryset non empty else return HTTP404
# process and return serializer data
我的问题是,使用用户输入直接查询ORM是否安全?
如果没有,在查询之前应该做什么?
我使用的是最小的Django Rest Framework安装,没有过滤器支持(出于某些奇怪的原因)
谢谢。答案 0 :(得分:0)
来自文档
“由于使用查询参数化构造了查询,因此Django的查询集受到了防止SQL注入的攻击。查询的SQL代码是与查询的参数分开定义的。由于参数可能是用户提供的,因此不安全,因此底层数据库会对其进行转义驱动程序。”