Выбор ответа Junior Сессии и безопасность спрашивают часто обновлено
Защита от SQL-инъекций
Вопрос
Какой способ надёжно защищает от SQL-инъекции при поиске пользователя по email?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: $pdo-prepare("... WHERE email = ?") и execute([$email]). Подготовленный запрос передаёт данные отдельно от текста SQL, и СУБД никогда не интерпретирует их как код. addslashes не учитывает кодировку соединения и контекст (числа без кавычек, LIKE, имена колонок).
Варианты ответа
addslashes($email)перед подстановкой в строку запросаWHERE email = '...'- Проверка
strlen($email) < 100перед подстановкой в запрос $pdo->prepare("... WHERE email = ?")иexecute([$email])правильный ответhtmlspecialchars($email, ENT_QUOTES)перед подстановкой в SQL
Разбор
Подготовленный запрос передаёт данные отдельно от текста SQL, и СУБД никогда не интерпретирует их как код. addslashes не учитывает кодировку соединения и контекст (числа без кавычек, LIKE, имена колонок). Ограничение длины не мешает короткой инъекции. htmlspecialchars защищает HTML, а не SQL. Имена колонок и порядок сортировки параметрами не передаются, их проверяют по белому списку.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.