Mongoose 查询真的能防 SQL 注入吗?
我最近在用 Mongoose 做一个用户搜索功能,前端传个用户名过来,后端直接用 User.findOne({ username: req.query.name }) 查询。听说 Mongoose 会自动转义,但不确定是不是真的安全。有没有可能被注入?比如传个 {"$ne": ""} 这种会不会绕过?
我试过手动用 req.query.name = { "$gt": "" } 模拟攻击,结果还真查出数据了!这算不算注入?Mongoose 不是说能防注入吗?到底该怎么写才安全?
const user = await User.findOne({
username: req.query.name // 这样写安全吗?
});
代码放这了,你可以通过检查传入的查询参数是否为字符串来增加一层安全性:
这样可以确保
req.query.name是一个字符串,而不是一个对象,从而防止注入攻击。别忘了在实际项目中加入更多的错误处理和日志记录。