清理Mongoose中的用户输入

Ben*_*Ben 14 mongoose mongodb node.js

除了这个相当无意义的答案和另一个不受欢迎的答案,我似乎找不到任何有关使用Mongoose消毒用户输入的资源.

这里有关于Node/MongoDB注入的博客文章在服务器级别看起来很好,但中间件级别(即Mongoose)必须有一些可以清理输入并确保数据库合理安全的东西.

有这样的野兽,还是甚至是必要的?

Pet*_*ons 17

似乎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);
Run Code Online (Sandbox Code Playgroud)