MongoDB注入攻击预防

tom*_*456 3 mongoose mongodb node.js express

考虑防止对我的 API 使用的 MongoDB 进行注入攻击。

私钥被发送到 API,API 检查私钥是否存在于数据库中:

App.findOne({ privateKey: privateKey }, function (err, app) {
  //do something here
}
Run Code Online (Sandbox Code Playgroud)

像这样的简单搜索(我正在使用 Mongoosejs)容易受到注入攻击吗?我读过 $where 的使用,但不确定我是否需要在这里做任何事情来防止恶意活动。

任何建议将不胜感激。

更新:经过更多阅读后,我将查询更改为以下内容:

App.findOne({ privateKey: String(privateKey) }, function (err, app) {
  //do something here
}
Run Code Online (Sandbox Code Playgroud)

这是一种改进吗?

wdb*_*ley 5

如果您不强制执行变量的类型privateKey,则它很容易受到某些注入攻击,例如,如果有人向您发送了私钥{ "$gte" : "abracadabra" },则查询可能会返回客户端不应访问的文档。强制使用 as String 类型privateKey应该足以防范简单的注入攻击。