В этой статье
Что такое HTML-сущности?
HTML-сущности — это специальные коды, представляющие символы, которые имеют особое значение в HTML или не могут быть введены напрямую. Например, < — это HTML-сущность для символа < (знак меньше), который иначе был бы воспринят как начало HTML-тега.
Сущности могут быть именованными (<, &, ©) или числовыми (<, &). Именованные сущности более читаемы; числовые работают для любого Unicode-символа даже без соответствующей именованной сущности.
Как работает кодирование HTML-сущностей
Кодировщик сканирует текст в поисках символов, требующих экранирования, и заменяет их соответствующими сущностями.
- Обязательное экранирование — < > & " ' всегда экранируются для предотвращения HTML-инъекций и XSS
- Расширенное экранирование — опциональное кодирование всех не-ASCII-символов как числовых сущностей
- Режим декодирования — преобразует HTML с закодированными сущностями обратно в обычный текст для проверки
Попробуйте бесплатно — без регистрации
Закодировать HTML-сущности →Когда применять кодирование HTML-сущностей
Кодирование HTML-сущностей критически важно для безопасности и корректного отображения специальных символов на веб-страницах.
- Отображение пользовательского контента — всегда кодируйте пользовательский контент перед рендерингом в HTML для предотвращения XSS-атак
- Шаблоны email — кодируйте специальные символы в HTML-шаблонах писем для корректного отображения
- Документация — экранируйте примеры кода в HTML-документации, чтобы угловые скобки отображались правильно
Часто задаваемые вопросы
Что такое XSS и как кодирование сущностей защищает от него?
Межсайтовый скриптинг (XSS) — это атака, при которой вредоносные скрипты внедряются на веб-страницы, просматриваемые другими пользователями. Если пользователь вводит <script>alert('xss')</script> и это отображается как HTML, скрипт выполняется. Кодирование сущностей преобразует < в <, что заставляет браузер отображать его как текст, предотвращая выполнение скрипта.
Когда использовать & вместо & в HTML?
В HTML-атрибутах и содержимом символ & должен быть закодирован как & везде, где он не является частью HTML-сущности. Незакодированный & в HTML является ошибкой разбора. В URL внутри атрибутов href символ & также должен быть закодирован как & для корректного HTML (хотя браузеры обычно прощают эту ошибку).
Защищает ли кодирование HTML-сущностей от SQL-инъекций?
Нет. Кодирование HTML-сущностей защищает только от HTML-инъекций (XSS). Для защиты от SQL-инъекций используйте параметризованные запросы или подготовленные выражения на уровне работы с базой данных. Это разные векторы атак, требующие разных методов защиты — никогда не полагайтесь на HTML-кодирование для предотвращения SQL-инъекций.