Выбор ответа Middle Инъекции: SQL, NoSQL, команды обновлено

NoSQL-инъекция в MongoDB

Вопрос

Код входа: db.users.findOne({ email: req.body.email, password: req.body.password }). Какое тело запроса обойдёт проверку пароля?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: {"email": "admin@site.ru", "password": {"$ne": null}}. Если JSON-объект попадает в фильтр, оператор $ne превращает условие в «пароль не равен null».

Варианты ответа

  1. {"email": "admin@site.ru", "password": "' OR '1'='1"}
  2. {"email": "admin@site.ru", "password": "admin"}
  3. {"email": "admin@site.ru", "password": {"$ne": null}}правильный ответ
  4. {"email": "admin@site.ru"}

Разбор

Если JSON-объект попадает в фильтр, оператор $ne превращает условие в «пароль не равен null». SQL-синтаксис в MongoDB не работает. Подбор пароля «admin» не инъекция. Отсутствие поля даст password: undefined, которое драйвер обычно не превращает в обход. Защита: проверка типов и схемы, запрет ключей с $. Пароль к тому же должен проверяться по хешу, а не в запросе.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.