清理Mongoose中的用户输入

时间:2015-02-25 03:00:23

标签: node.js mongodb mongoose

除了this fairly uninformative answer和另一个unpopular answer之外,我似乎找不到任何有关使用Mongoose清理用户输入的资源。

有一个关于Node / MongoDB注入的blog post here在服务器级别看起来很好,但是中间件级别(即Mongoose)必须有一些东西可以清理输入并确保数据库中的合理安全。

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

2 个答案:

答案 0 :(得分:14)

似乎mongo-sanitize npm模块是启动原始转义功能的地方。老实说,这听起来更适合于连接/表达中间件层,因为在mongoose层,根据设计,代码不会对查询/更新参数是否由应用程序开发人员编写(在这种情况下是不得消毒或不能正常运作)或涉及用户输入(必须消毒)。因此,我建议使用中间件功能来清理用户输入的最常见位置,以输入:req.bodyreq.queryreq.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))