您好,我正在手动实现一个 API 过滤器,用户可以在其中过滤数据库,
其中一个查询如下所示,
book/?writer=Anonymous
其中 writer 通过来自 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 安装,没有过滤器支持(出于一些奇怪的原因)
谢谢。
最佳答案
来自文档
“Django 的查询集受到 SQL 注入(inject)的保护,因为它们的查询是使用查询参数化构建的。查询的 SQL 代码与查询的参数分开定义。由于参数可能是用户提供的,因此不安全,它们会被底层数据库转义司机。”
关于python - 直接使用用户输入查询 Django ORM 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37440526/