Выбор ответа Junior Проверка сгенерированного кода спрашивают часто обновлено
SQL от ассистента
Вопрос
Ассистент написал: db.query("SELECT * FROM users WHERE email = '" + email + "'"). Что исправить в первую очередь?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Перейти на параметризованный запрос с плейсхолдером. Конкатенация ввода в SQL это инъекция: email вида x' OR '1'='1 вернёт всех пользователей.
Варианты ответа
- Заменить двойные кавычки на одинарные во всём запросе
- Перейти на параметризованный запрос с плейсхолдеромправильный ответ
- Добавить LIMIT 1000, чтобы запрос выполнялся быстрее
- Переписать запрос на ORM, иначе код не пройдёт ревью
Разбор
Конкатенация ввода в SQL это инъекция: email вида x' OR '1'='1 вернёт всех пользователей. Параметризованный запрос передаёт значение отдельно от текста запроса. ORM тоже параметризует, но это не обязательное условие. Кавычки и LIMIT уязвимость не закрывают.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.