Django中用户定义的postgres-jsonb查询的安全问题



Django中有一个postgresjsonb字段,允许用户存储任意用户数据。我们希望允许用户查询此字段,但不确定是否存在安全隐患

型号

from django.db import models
class Item(models.Model):
user = models.ForeignKey("user", null=False)
meta = JSONField()

查询

def custom_query(operation, value):
qs = Item.objects.filter(user=user)
params = {
"meta__" + operation: value
}
qs = qs.filter(**params)

用法:

假设CCD_ 1是CCD_。

custom_query(operation="contains", value={"a": 1})
custom_query(operation="a", value=1)

以上查询应该是有效且等效的查询。

这是执行查询的安全方式吗

我建议为有效的operation添加一个allowlist,也许检查value非常简单(例如,只有字符串(,但在存在其他过滤器的情况下,可以确保可以选择的行是用户可以看到的行,我认为这没有问题。

相关内容

  • 没有找到相关文章