Mongoose是否可防范NoSQL注入?多方资料存疑需解惑
能否依赖Mongoose防范NoSQL注入?
常规场景下可以放心依赖
Mongoose的Schema验证、结构化查询构建机制,能直接拦截大部分常规NoSQL注入手段——比如攻击者试图在输入里塞$gt、$ne这类MongoDB操作符,Mongoose会自动过滤或拒绝不符合Schema规则的恶意内容。这也是很多资料提到用Mongoose时不需要额外用mongo-sanitize的原因。但$regex正则查询是例外
当你用Mongoose做$regex模糊查询时,如果直接把用户输入的字符串当作正则表达式使用,就可能出现正则注入问题。比如用户输入.*或者带^、(这类正则特殊字符的内容,会让查询范围超出预期,甚至被用来遍历数据。这种情况Mongoose不会自动处理,因为它默认你是有意使用正则语法。应对方案
- 普通查询:安心用Mongoose的Schema和查询方法,不用额外加 sanitize 工具;
- 正则查询:手动转义用户输入里的正则特殊字符,比如用Node.js的
RegExp.escape()(ES2021+支持),或者Mongoose提供的转义方法,再传入$regex。
内容的提问来源于stack exchange,提问作者Ronald
相关产品推荐
相关产品推荐

