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

标签 python django security django-rest-framework sanitization

您好,我正在手动实现一个 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/

相关文章:

python - 在 Python 中检查文件是否存在(并忽略大小写)

django - 创建时超出 Django 模型的最大递归深度

database - 文件上传的免费服务器端防病毒/安全/木马保护?

java - 在 JAX-RS 中使用 API key 进行身份验证

python - 如何在 python 中为多种语言编写文档字符串

python - 使用 DBSCAN 时出现 "could not convert integer scalar"错误

python - 从python的目录树中收集匹配条件的所有目录

django - 迁移可重用 django 应用程序模型以使用自定义用户模型时遇到问题

Django ORM - select_related 和 order_by 与外键

java - 在Java中将敏感数据保存在私有(private)静态字段中是否安全?