Выбор ответа Junior Сессии и безопасность спрашивают часто обновлено
Защита от XSS при выводе
Вопрос
Пользовательское имя выводится в HTML-шаблоне на чистом PHP. Как правильно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: htmlspecialchars($name, ENTQUOTES, 'UTF-8') при выводе. XSS лечится экранированием по контексту вывода: для HTML htmlspecialchars с ENTQUOTES (заодно защищает атрибуты в кавычках) и явной кодировкой.
Варианты ответа
strip_tags($name)при сохранении в базу, вывод как есть- Проверить, что в имени нет слова
scriptи угловых скобок addslashes($name)при выводе, чтобы экранировать кавычкиhtmlspecialchars($name, ENT_QUOTES, 'UTF-8')при выводеправильный ответ
Разбор
XSS лечится экранированием по контексту вывода: для HTML htmlspecialchars с ENT_QUOTES (заодно защищает атрибуты в кавычках) и явной кодировкой. Шаблонизаторы Blade ({{ }}) и Twig экранируют автоматически. strip_tags при сохранении портит данные и не защищает атрибуты и JS-контекст. Чёрные списки слов обходятся. addslashes про другое.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.