Выбор ответа Junior Проверка сгенерированного кода спрашивают часто обновлено

SQL от ассистента

Вопрос

Ассистент написал: db.query("SELECT * FROM users WHERE email = '" + email + "'"). Что исправить в первую очередь?

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

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

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

Коротко

Правильный ответ: Перейти на параметризованный запрос с плейсхолдером. Конкатенация ввода в SQL это инъекция: email вида x' OR '1'='1 вернёт всех пользователей.

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

  1. Заменить двойные кавычки на одинарные во всём запросе
  2. Перейти на параметризованный запрос с плейсхолдеромправильный ответ
  3. Добавить LIMIT 1000, чтобы запрос выполнялся быстрее
  4. Переписать запрос на ORM, иначе код не пройдёт ревью

Разбор

Конкатенация ввода в SQL это инъекция: email вида x' OR '1'='1 вернёт всех пользователей. Параметризованный запрос передаёт значение отдельно от текста запроса. ORM тоже параметризует, но это не обязательное условие. Кавычки и LIMIT уязвимость не закрывают.

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

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