首页/安全/漏洞与攻击面速查/NoSQL 注入(MongoDB 场景)
Web 漏洞原理与防护55 条

NoSQL 注入(MongoDB 场景)

MongoDB 等文档数据库在使用查询对象时,若把用户输入整体反序列化为查询条件(可传入 $ne、$gt 等操作符对象),条件逻辑可被篡改、登录校验可被绕过。

漏洞与攻击面速查安全更新于 2026-10-12

风险写法与修复

风险写法与修复
// 风险:直接使用客户端 JSON 作为查询条件
// db.collection('users').findOne(req.body)

// 修复:只取所需字段并强制类型
const username = String(req.body.username);
const password = String(req.body.password);
db.collection('users').findOne({ username, password });

输入层限制(示意)

输入层限制(示意)
拒绝非字符串/数字类型的参数
过滤 $ 开头的键名
为集合定义 schema 校验,限制字段类型
ORM/ODM 提供 schema 校验时,为集合定义严格 schema 可显著降低此类风险。

易错点

  • 只在登录接口做了类型校验:搜索与筛选接口同样传对象,等于留了另一个入口

数据来源与参考

  • MongoDB 官方文档(Query and Projection Operators)
  • OWASP NoSQL Injection 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌