1

我一定遗漏了一些非常明显的东西。有人请羞辱我;

我正在构建 2.2 聚合查询,C# Linq 驱动程序本身并不支持这些查询,因此我必须使用点分表示法为嵌套属性构建字符串化名称。假设我有这样的结构;

    db.so.insert({
    a:1,
    b:2,
    n : {
        z:4,
        x:5,
        y: {
           v:"value",
        }
    }
});

因此,要引用“值”,我需要使用名称n.y.vn[y][v]. 现在,由于我从 Web 客户端 ( http://www.demo.org/exampleQuery?field1=n&field2=y&field3=v) 接收查询的字段属性名称选择,因此我需要构造属性名称;

var fieldNameForQuery = field1+"."+field2+"."+field3;

我显然对此感到紧张,所以我当然会通过清理我的输入参数来防御 NOSQL 注入,但我更愿意为此使用 C# 驱动程序。

我想我想要类似的东西;

MongoDB.Driver.BuildNestedFieldName(field1, field2, field3));

这基本上是我必须自己编写的,但感觉就像是一个杂物,我宁愿不承担以这种方式构建数据库安全字段名称的责任。

4

1 回答 1

0

目前没有功能可以做你想做的事。但是,如果所有的功能都是在中间粘贴“.”,那么我们并没有解决注入问题,因为我们插入的东西不能被注入......注入问题将通过确保“field1”、“field2”和“field3”是字段名称的有效值。当然,根据http://bsonspec.org/#/specification并没有太多无效的内容。我们唯一要检查的是字符串中没有 2 个空终止符。所以......这并没有给我们留下太多我们可以做的事情。

这有意义吗?

于 2012-10-24T18:46:31.873 回答