Выбор ответа Junior Сессии и безопасность спрашивают часто обновлено

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

Вопрос

Какой способ надёжно защищает от SQL-инъекции при поиске пользователя по email?

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

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

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

Коротко

Правильный ответ: $pdo-prepare("... WHERE email = ?") и execute([$email]). Подготовленный запрос передаёт данные отдельно от текста SQL, и СУБД никогда не интерпретирует их как код. addslashes не учитывает кодировку соединения и контекст (числа без кавычек, LIKE, имена колонок).

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

  1. addslashes($email) перед подстановкой в строку запроса WHERE email = '...'
  2. Проверка strlen($email) < 100 перед подстановкой в запрос
  3. $pdo->prepare("... WHERE email = ?") и execute([$email])правильный ответ
  4. htmlspecialchars($email, ENT_QUOTES) перед подстановкой в SQL

Разбор

Подготовленный запрос передаёт данные отдельно от текста SQL, и СУБД никогда не интерпретирует их как код. addslashes не учитывает кодировку соединения и контекст (числа без кавычек, LIKE, имена колонок). Ограничение длины не мешает короткой инъекции. htmlspecialchars защищает HTML, а не SQL. Имена колонок и порядок сортировки параметрами не передаются, их проверяют по белому списку.

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

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