除了this fairly uninformative answer和另一个unpopular answer之外,我似乎找不到任何有关使用Mongoose清理用户输入的资源。
有一个关于Node / MongoDB注入的blog post here在服务器级别看起来很好,但是中间件级别(即Mongoose)必须有一些东西可以清理输入并确保数据库中的合理安全。
有这样的野兽,还是甚至是必要的?
答案 0 :(得分:14)
似乎mongo-sanitize npm模块是启动原始转义功能的地方。老实说,这听起来更适合于连接/表达中间件层,因为在mongoose层,根据设计,代码不会对查询/更新参数是否由应用程序开发人员编写(在这种情况下是不得消毒或不能正常运作)或涉及用户输入(必须消毒)。因此,我建议使用中间件功能来清理用户输入的最常见位置,以输入:req.body
,req.query
和req.params
。例如,您可以执行类似(草图)的操作:
var json = require("body-parser").json;
var sanitize = require("mongo-sanitize");
function cleanBody(req, res, next) {
req.body = sanitize(req.body);
next();
}
function updateUser(req, res) {
//...
// safe to build an update query involving req.body here
}
app.put("/api/users", json(), cleanBody, updateUser);
答案 1 :(得分:0)
有一个新工具可以自动控制即将到来的URL和html正文数据。 https://www.npmjs.com/package/content-filter
也可以使用本机escape()
方法来保护数据库。
运行下面的代码段以查看结果。
let a = "{$gt:25}"
console.log(a)
console.log(escape(a))