Очистить пользовательский ввод в Mongoose

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

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

Есть ли такой зверь, или он вообще нужен?

3 ответа

Решение

Кажется, что модуль mongo-sanitize npm - это то место, с которого нужно начинать с необработанного экранирования. Честно говоря, это звучит более уместно на уровне промежуточного программного обеспечения connect / express, потому что на уровне 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))

Пакет npm, который может помочь, - это экспресс-валидатор https://express-validator.github.io/docs/.

Другие вопросы по тегам