在Mongoose中清理用户input

除了这个相当不明确的答案和另一个不受欢迎的答案 ,我似乎无法find任何使用Mongoose来清理用户input的资源。

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

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

看来mongo-sanitize npm模块是开始原始转义function的地方。 老实说,这听起来更适合连接/expression中间件层,因为在mongoose层,通过devise,代码不会对查询/更新参数施加任何期望,而不pipe它们是否由应用程序开发者编写(在这种情况下,不能被消毒或不能正常运行)或涉及用户input(必须消毒)。 因此,我build议使用中间件函数来清理用户input最常见的地方: 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); 

有一个新的工具提供了即将到来的URL和html正文数据的自动控制。 https://www.npmjs.com/package/content-filter

也可以使用本地的escape()方法来保护数据库。

运行下面的代码片段查看结果。

 let a = "{$gt:25}" console.log(a) console.log(escape(a))