Может ли внедрение по-прежнему быть проблемой, если все операции с базой данных выполняются через Mongoose?

#javascript #node.js #mongodb #security #mongoose

#javascript #node.js #mongodb #Безопасность #mongoose

Вопрос:

Изучая основы MongoDB, я прочитал, что MongoDB уязвим для инъекционных атак «из коробки». В node это можно предотвратить с помощью модуля mongo-sanitize. Пока все хорошо. Теперь давайте добавим Mongoose к уравнению.

Если мы используем Mongoose

  • Нам все еще нужно очищать входные данные MongoDB? Должны ли мы по-прежнему использовать mongo-sanitize вместе с Mongoose?
  • Предлагает ли Mongoose какую-либо явную защиту от внедрения вообще, или защита исходит от применения типов в схемах и моделях?

Я помню, что читал, что Mongoose может в некоторой степени предотвращать инъекции, но я не знаю специфики, или если это излишне для очистки от Mongoose.

Ответ №1:

Как упоминалось в статье, проблема возникает, когда пользователи не отправляют строку типа ‘bergur’ и ‘myawesomepassword’, а вместо этого отправляют {"$ne": null} имена пользователей и пароли.

Если вы создаете схему и определяете имя пользователя и пароль в виде строк, то Mongoose преобразует ее в строку, и вы избегаете проблемы.

Что касается внедрения where, mongo-sanitize вам здесь не поможет. Решение состоит в том, чтобы просто никогда не использовать оператор $where

Итак, чтобы просто ответить на ваш вопрос:

  1. Нет, вам не нужно использовать mongo-sanitize
  2. Нет явной защиты от внедрения, защита исходит от схем и моделей.