除了 这个相当没有说服力的答案 和另一个 不受欢迎的答案,我似乎无法找到任何有关使用Mongoose清理用户输入的资源。
有一个 博客文章在这里 关于Node / MongoDB注入在服务器级别看起来很好,但中间件级别(即Mongoose)必须有一些可以清理输入并确保数据库合理安全的东西。
有这样的野兽,还是甚至是必要的?
除了 这个相当没有说服力的答案 和另一个 不受欢迎的答案,我似乎无法找到任何有关使用Mongoose清理用户输入的资源。
有一个 博客文章在这里 关于Node / MongoDB注入在服务器级别看起来很好,但中间件级别(即Mongoose)必须有一些可以清理输入并确保数据库合理安全的东西。
有这样的野兽,还是甚至是必要的?
好像是 蒙戈-的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);
有一个新工具可以自动控制即将到来的URL和html正文数据。 https://www.npmjs.com/package/content-filter
也是原生的 escape()
方法可用于保护数据库。
运行下面的代码段以查看结果。
let a = "{$gt:25}"
console.log(a)
console.log(escape(a))