HyperText Markup Language lub HTML to podstawowy język stron internetowych w Internecie. Obejmuje obsługę wielu innych języków, które dodają dodatkowe funkcje i style, takie jak JavaScript i CSS. Wszystkie te języki są oparte na tekście z pewnymi znaczącymi znakami używanymi do oddzielania ciągów literowych, które powinny być drukowane w przeglądarce i kodu, który powinien być interpretowany i wykonywany.
Ten projekt ma jednak pewne problemy, które stają się oczywiste, gdy chcesz wydrukować jeden z istotnych znaków w przeglądarce. Najlepszymi przykładowymi znakami do użycia są symbole „mniejsze niż” i „większe niż”. Odpowiednio te symbole są używane do otwierania i zamykania segmentów kodu w HTML. Poprawną metodą bezpiecznego drukowania tych znaków na ekranie jest użycie encji HTML.
Encje HTML i zabezpieczenia
Dzięki tym znakom, które mają specjalne znaczenie, musisz być naprawdę ostrożny, aby upewnić się, że zastąpiłeś je wersją HTML, jeśli chcesz, aby były drukowane w przeglądarce. Niestety, wielu twórców stron internetowych zapomina, że użytkownicy mogą przesyłać dane do wielu stron internetowych. Jeśli te dane wejściowe użytkownika zawierają znaczące znaki i nie są one zastępowane encjami HTML w procesie zwanym oczyszczaniem, oznacza to, że witryna ma usterkę Cross-Site Scripting (XSS).
Wskazówka: nie próbuj umieszczać na stronach internetowych znaków specjalnych w celu znalezienia luk XSS. Z technicznego punktu widzenia jest to włamanie i jest przestępstwem, chyba że masz pozwolenie od właściciela witryny.
Jak działają encje HTML (a czasami nie)
Encje HTML działają, ponieważ przeglądarka wie, że ma wyświetlać go jako odpowiedni znak specjalny i nie traktować go jako znaku specjalnego. Wszystkie encje HTML zaczynają się znakiem ampersand „&” i kończą się średnikiem „;”. Większość znaków jest identyfikowana przez numer jednostki, chociaż niektóre znaki specjalne mają również skróconą nazwę. Na przykład „&”, „<” i „>” mają odpowiednio numery jednostek „&”, „<” i „>” oraz nazwy jednostek „&”, „<” i „>”. Przeglądarka wie, że te ciągi oznaczają, że musi wyświetlać odpowiednie znaki.
Wskazówka: pełną listę nazw jednostek znaków można znaleźć tutaj , chociaż obsługa nazw jednostek różni się w zależności od przeglądarki.
W większości przypadków użytkownicy powinni widzieć tylko znaki, które reprezentują encje HTML. Możliwe jest jednak zobaczenie zakodowanych znaków, zwykle ampersand „&”, w procesie zwanym „podwójnym kodowaniem”. Dzieje się tak, gdy znak ampersand pojawia się we własnej zakodowanej wersji. Podwójne kodowanie zazwyczaj ma miejsce, gdy dane wejściowe są poprawnie zakodowane, ponieważ są przesyłane, jednak podczas wysyłania danych wyjściowych są ponownie oczyszczane. Powoduje to, że znak ampersand na początku „&” zostaje zakodowany po raz drugi i pojawia się jako „&”, przeglądarka następnie poprawnie interpretuje to jako ciąg, który powinien zostać wydrukowany jako „&” po zdekodowaniu encji HTML i zignorowaniu podmiot częściowy.