gpt4 book ai didi

node.js - 直接从 URL 查询字符串提供的 mongo 查询有多危险?

转载 作者:IT老高 更新时间:2023-10-28 13:06:45 26 4
gpt4 key购买 nike

我在玩 , , 和 .

为了立即启动和运行,我将 Express 查询字符串对象直接传递给 mongoose 查找函数。我很好奇的是这种做法在实时应用程序中会有多危险。我知道 RDBMS 极易受到 SQL 注入(inject)的攻击。除了“清理输入”的好建议之外,这段代码有多邪恶:

app.get('/query', function (req, res) {
models.findDocs(req.query, function (err, docs) {
res.send(docs);
});
});

意味着对 http://localhost:8080/query?name=ahsteele&status=a 的 get 请求只会将以下内容插入 findDocs 函数:

{
name: 'ahsteele',
status: 'a'
}

这感觉很恶心有很多原因,但它有多不安全?将查询参数传递给 mongodb 的最佳实践是什么? express 是否提供任何开箱即用的 sanitizer ?

最佳答案

就注入(inject)问题而言,就像使用 SQL 一样,风险要低得多……尽管理论上可以通过未知的攻击向量来实现。

数据结构和协议(protocol)是二进制和 API 驱动的,而不是利用特定领域语言中的转义值。基本上,您不能只是欺骗解析器在末尾添加“;db.dropCollection()”。

如果它只用于查询,它可能没问题......但我仍然会提醒你使用一点点验证:

  • 确保仅使用字母数字字符(过滤或使空值无效以及您通常不会接受的任何其他内容)
  • 强制每个术语的最大长度(例如 255 个字符)
  • 强制整个查询的最大长度
  • 去掉以“$”开头的特殊参数名称,如“$where”等
  • 不允许嵌套数组/文档/哈希...只允许字符串和整数

另外,请记住,空查询会返回所有内容。您可能希望对该返回值进行限制。 :)

关于node.js - 直接从 URL 查询字符串提供的 mongo 查询有多危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15917400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com