我在玩node.js,express和mongoose。
为了立即启动并运行,我将Express查询字符串对象直接传递给mongoose find函数。我很好奇的是,这种做法在实时应用中会有多危险。我知道RDBMS极易受到SQL注入的攻击。除了“清理您的输入”的好建议之外,这段代码有多邪恶:
app.get('/query', function (req, res) { models.findDocs(req.query, function (err, docs) { res.send(docs); }); });
这意味着获取请求http://localhost:8080/query?name=ahsteele&status=a只会将以下内容推送到findDocs函数中:
http://localhost:8080/query?name=ahsteele&status=a
{ name: 'ahsteele', status: 'a' }
由于种种原因,这感觉很不好,但是它有多不安全?将查询参数传递给mongodb的最佳实践是什么?快递提供开箱即用的消毒服务吗?
就注入问题而言,就像SQL一样,风险明显更低……尽管理论上可以通过未知的攻击媒介来实现。
数据结构和协议是二进制的,并且由API驱动,而不是利用特定于域的语言中的转义值。基本上,您不能只是诱使解析器在末尾添加“; db.dropCollection()”。
如果仅用于查询,则可能很好…但是我仍然提醒您使用一点验证:
另外,请记住,空查询将返回所有内容。您可能想要限制该返回值。:)