Язык разметки гипертекста, или HTML, является основным языком для веб-страниц в Интернете. Он включает поддержку ряда других языков, которые добавляют дополнительную функциональность и стили, например JavaScript и CSS. Все эти языки основаны на тексте с некоторыми значимыми символами, используемыми для разделения литеральных строк, которые должны быть напечатаны в браузере, и кода, который следует интерпретировать и выполнять.
Однако у этого дизайна есть некоторые проблемы, которые становятся очевидными, когда вы хотите напечатать один из значимых символов в браузере. Лучшими примерами символов являются символы «меньше» и «больше». Соответственно, эти символы используются для открытия и закрытия сегментов кода в HTML. Правильный метод безопасной печати этих символов на экране - использовать объекты HTML.
Сущности HTML и безопасность
Благодаря тому, что эти символы имеют особое значение, вы должны быть очень осторожны, чтобы заменить их версией объекта HTML, если вы хотите, чтобы они были напечатаны в браузере. К сожалению, многие веб-разработчики забывают, что пользователи могут отправлять данные на многие веб-сайты. Если этот пользовательский ввод включает в себя значимые символы и они не заменяются объектами HTML в процессе, называемом дезинфекцией, значит, на веб-сайте имеется уязвимость межсайтового скриптинга (XSS).
Совет. Не пытайтесь отправлять на веб-сайты специальные символы, пытаясь найти уязвимости XSS. Технически это является взломом и является уголовным преступлением, если у вас нет разрешения от владельца веб-сайта.
Как работают объекты HTML (а иногда и нет)
Сущности HTML работают, потому что браузер знает, как отображать их как соответствующий специальный символ, а не рассматривать как специальный символ. Все объекты HTML начинаются с амперсанда «&» и заканчиваются точкой с запятой «;». Большинство символов идентифицируются по номеру объекта, хотя некоторые специальные символы также имеют сокращенное имя. Например, «&», «» имеют номера сущностей «&», «», а также имена сущностей «&», «» соответственно. Браузер знает, что эти строки означают, что он должен отображать соответствующие символы.
Совет: можно найти полный список имен персонажей. здесь, хотя поддержка имени объекта зависит от браузера.
В большинстве случаев пользователи должны видеть только символы, которые представляют объекты HTML. Однако можно увидеть закодированные символы, обычно с амперсандом «&», с помощью процесса, называемого «Двойное кодирование». Это происходит, когда символ амперсанда появляется в своей собственной закодированной версии. Двойное кодирование обычно происходит, когда ввод правильно закодирован, однако, когда он выводится, он снова подвергается дезинфекции. Это приводит к тому, что амперсанд в начале символа «&» кодируется второй раз и отображается как «&», затем браузер правильно интерпретирует это как строку, которая должна быть напечатана как «&», декодировав сущность HTML и проигнорировав частичную организация.