Санизировать вход пользователя в Mongoose

За исключением этого довольно неинформативного ответа и другого непопулярного ответа, я не могу найти никаких ресурсы по дезинфекции пользовательского ввода с использованием Mongoose.

Здесь есть сообщение в блоге о введении Node/MongoDB, которое кажется хорошим на уровне сервера, но должно быть что-то в промежуточного уровня (т.е. Mongoose), который может дезинфицировать входные данные и обеспечивать разумную безопасность в базе данных.

Есть ли такой зверь, или он даже необходим?

Ответ 1

Кажется, что 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);

Ответ 2

Появится новый инструмент, обеспечивающий автоматический контроль входящих URL-адресов и данных тела html. https://www.npmjs.com/package/content-filter

Также для защиты базы данных может использоваться собственный метод escape().

Выполните фрагмент кода ниже, чтобы увидеть результаты.

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