HyperText Markup Language neboli HTML je primární jazyk pro webové stránky na internetu. Zahrnuje podporu pro řadu dalších jazyků, které přidávají další funkce a styly, jako je JavaScript a CSS. Všechny tyto jazyky jsou založeny na textu s některými smysluplnými znaky používanými k oddělení doslovných řetězců, které by měly být vytištěny v prohlížeči, a kódu, který by měl být interpretován a spuštěn.
Tento design má však určité problémy, které jsou zřejmé, když chcete do prohlížeče vytisknout jeden ze smysluplných znaků. Nejlepšími příklady znaků jsou symboly „menší než“ a „větší než“. Tyto symboly se používají k otevírání a zavírání segmentů kódu v HTML. Správnou metodou bezpečného tisku těchto znaků na obrazovku je použití entit HTML.
HTML entity a zabezpečení
Díky těmto znakům, které mají zvláštní význam, musíte být opravdu opatrní, abyste je nahradili verzí entity HTML, pokud je chcete vytisknout v prohlížeči. Bohužel mnoho webových vývojářů zapomíná, že uživatelé mohou odesílat vstupy na mnoho webových stránek. Pokud tento uživatelský vstup obsahuje smysluplné znaky a nejsou nahrazeny entitami HTML, v procesu zvaném sanitace, pak má web zranitelnost Cross-Site Scripting (XSS).
Tip: Nepokoušejte se na weby odesílat speciální znaky ve snaze najít zranitelnost XSS. To je technicky hackování a je trestné, pokud nemáte povolení od vlastníka webu.
Jak entity HTML fungují (a někdy ne)
HTML entity fungují, protože prohlížeč ví, že je má zobrazit jako příslušný speciální znak a nemá s ním zacházet jako se speciálním znakem. Všechny entity HTML začínají ampersandem „&“ a končí středníkem „;“. Většina znaků je identifikována číslem entity, i když některé speciální znaky mají také zkrácený název. Například „&“, „“ mají čísla entit „&“, „“ a také názvy entit „&“, „“. Prohlížeč ví, že tyto řetězce znamenají, že potřebuje zobrazit příslušné znaky.
Tip: Úplný seznam názvů znakových entit naleznete tady, ačkoli podpora názvů entit se liší podle prohlížeče.
Ve většině případů by uživatelé měli vždy vidět pouze znaky, které reprezentují entity HTML. Je však možné vidět zakódované znaky, běžně ampersand „&“, prostřednictvím procesu zvaného „Dvojité kódování“. K tomu dojde, když se znak ampersand objeví ve své vlastní zakódované verzi. Dvojité kódování obecně nastane, když je vstup správně zakódován, když je odeslán, ale když je výstup, je znovu vyčištěn. To má za následek, že ampersand na začátku znaku „&“ bude podruhé zakódován a zobrazí se jako „&“, prohlížeč pak správně to interpretuje jako řetězec, který by měl být vytištěn jako „&“ po dekódování entity HTML a ignorování části entita.