Выбор ответа 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».
Варианты ответа
{"email": "admin@site.ru", "password": "' OR '1'='1"}{"email": "admin@site.ru", "password": "admin"}{"email": "admin@site.ru", "password": {"$ne": null}}правильный ответ{"email": "admin@site.ru"}
Разбор
Если JSON-объект попадает в фильтр, оператор $ne превращает условие в «пароль не равен null». SQL-синтаксис в MongoDB не работает. Подбор пароля «admin» не инъекция. Отсутствие поля даст password: undefined, которое драйвер обычно не превращает в обход. Защита: проверка типов и схемы, запрет ключей с $. Пароль к тому же должен проверяться по хешу, а не в запросе.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.