使用用户输入直接查询Django ORM是否安全?

时间:2016-05-25 14:43:48

标签: python django security django-rest-framework sanitization

您好我正在手动实现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安装,没有过滤器支持(出于某些奇怪的原因)

谢谢。

1 个答案:

答案 0 :(得分:0)

来自文档

“由于使用查询参数化构造了查询,因此Django的查询集受到了防止SQL注入的攻击。查询的SQL代码是与查询的参数分开定义的。由于参数可能是用户提供的,因此不安全,因此底层数据库会对其进行转义驱动程序。”