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
非常简单(例如,只有字符串(,但在存在其他过滤器的情况下,可以确保可以选择的行是用户可以看到的行,我认为这没有问题。