mongodb 注入可能性

mongodb injection possibility

我是 mongodb 的新手,我在服务器端(节点 js)使用此查询,

collection.find({},function(e,crimes){
    collection.col.aggregate([{$match: req.body},
      {$group: { _id: "$district",  count: {$sum: 1}}}
    ],function(e,docs){
        console.log(docs);
        res.render('postResults', {
            "output" : docs
        });
   });
});

在行collection.col.aggregate([{$match: req.body}中我直接注入一个从客户端发送的对象req.body

我想知道这种方法是否会导致像 sql 注入 这样的安全漏洞。如果是,漏洞的严重程度如何?攻击者是否可以用它进行除只读操作以外的操作?

提前谢谢你..

答案是 "No",这不会导致任何查询注入问题,因为您的 Node.js 服务器已经将 HTTP 请求转换为 JSON 对象,因此输入的任何数据用户是一个 JavaScript 字符串,它是此 JSON 对象的一部分。您不会像在其他语言中那样连接字符串,这会使它们容易受到 SQL 注入攻击。

是的,您可以通过更改 req.body 来注入不同的查询。例如,如果您正在查找特定的犯罪,您的 req.body 可能看起来像 { "_id" : "123456" }。但我可以改为发送 { }。然后每个文档都会匹配,聚合管道会处理每个文档,这可能足以导致性能问题。由于聚合管道从不更改原始文档,因此您无法更改数据,因此这是一种只读攻击,但它仍可用于通过集合扫描和大容量聚合管道阻塞您的服务器。

您可以查看这些以了解问题;

  1. https://www.owasp.org/index.php/Testing_for_NoSQL_injection
  2. http://blog.websecurify.com/2014/08/hacking-nodejs-and-mongodb.html

解决方案;

  1. 如果用户与 MongoDB 交互,请不要使用带有 $where 运算符的函数。
  2. 有一些工具可以防止 注入 问题;
    https://www.npmjs.com/package/content-filter
    https://www.npmjs.com/package/mongo-sanitize
  3. 注意 CSRF

祝你好运。