Выбор ответа Junior JDBC и транзакции спрашивают часто обновлено

Защита от SQL-инъекций

Вопрос

Почему PreparedStatement защищает от SQL-инъекций?

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

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

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

Коротко

Правильный ответ: Параметры идут отдельно от текста запроса, и база не разбирает их как SQL. Текст запроса с ? отправляется и разбирается отдельно, значения параметров передаются как данные.

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

  1. Параметры идут отдельно от текста запроса, и база не разбирает их как SQLправильный ответ
  2. Он экранирует кавычки в строке параметра перед конкатенацией с запросом
  3. Он запрещает символы ; и -- в параметрах и бросает исключение
  4. Он выполняет запрос в режиме только для чтения, и изменить данные нельзя

Разбор

Текст запроса с ? отправляется и разбирается отдельно, значения параметров передаются как данные. Даже ' OR '1'='1 станет просто строкой для сравнения. Экранирование вручную и фильтрация символов ненадёжны, и драйвер ими не занимается. Режим только для чтения тут ни при чём.

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

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