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" }
。但我可以改为发送 { }
。然后每个文档都会匹配,聚合管道会处理每个文档,这可能足以导致性能问题。由于聚合管道从不更改原始文档,因此您无法更改数据,因此这是一种只读攻击,但它仍可用于通过集合扫描和大容量聚合管道阻塞您的服务器。
您可以查看这些以了解问题;
- https://www.owasp.org/index.php/Testing_for_NoSQL_injection
- http://blog.websecurify.com/2014/08/hacking-nodejs-and-mongodb.html
解决方案;
- 如果用户与 MongoDB 交互,请不要使用带有
$where
运算符的函数。
- 有一些工具可以防止 注入 问题;
https://www.npmjs.com/package/content-filter
https://www.npmjs.com/package/mongo-sanitize
- 注意 CSRF
祝你好运。
我是 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" }
。但我可以改为发送 { }
。然后每个文档都会匹配,聚合管道会处理每个文档,这可能足以导致性能问题。由于聚合管道从不更改原始文档,因此您无法更改数据,因此这是一种只读攻击,但它仍可用于通过集合扫描和大容量聚合管道阻塞您的服务器。
您可以查看这些以了解问题;
- https://www.owasp.org/index.php/Testing_for_NoSQL_injection
- http://blog.websecurify.com/2014/08/hacking-nodejs-and-mongodb.html
解决方案;
- 如果用户与 MongoDB 交互,请不要使用带有
$where
运算符的函数。 - 有一些工具可以防止 注入 问题;
https://www.npmjs.com/package/content-filter
https://www.npmjs.com/package/mongo-sanitize - 注意 CSRF
祝你好运。