Cross-site scripting (XSS)

Co to je?

Cross-Site Scripting (XSS) je jedním z nejpoužívanějších způsobů útoku na webové stránky. XSS zranitelnosti umožňují útočníkům ovládat webovou stránku při návštěvě jiných uživatelů.

XSS je jednou z nejčastěji hlášených webových zranitelností.

Jak to funguje?

Útočník vloží do nějakého pole pro vstupy na webové stránce nebo aplikaci škodlivý kód ve tvaru, který naruší script stránky (nejčastěji pomocí neočekávaného syntaxu) a vykoná se místo něj. Tento kód se následně spouští v internetovém prohlížeči každého návštěvníka stránky, aniž by si toho všimnul.

K čemu může útočník využít znanitelnost XSS?

Ochrana systémů proti zranitelnosti XSS

Escapování

Webové stránky se skládají z HTML s dynamickým obsahem vloženým při vykreslování stránky. Do tohoto dynamického obsahu hacker vloží kód upravený tak, aby narušil jeho syntax a přidal se do něj. Například vložíme-li do pole pro komentáře na správném místě kód <button onclick=""window.allert("Tato webová stránka je napadena!">, vznikne po zpracování na místě komentáře tlačítko, po jehož stisknutí se objeví vyskakovací okno s textem. Jednoduše se kód přidá do stránky, jako by byl její součástí.

Aby tomu správce stránky předešel, může využít escapování. To znamená, že se všechny znaky, které by mohly narušit syntax kódu (<>"* apod.) nahradí jejich ekvivalenty v tabulce ASCII (např. místo < uloží &#60). Pokud bychom v tomto případě do pole vložili <button onclick=""window.allert("Tato webová stránka je napadena!">, zobrazil by se po zpracování jenom text <button onclick=""window.allert("Tato webová stránka je napadena!">

Seznam povolených vstupů

Pokud je formulář jednoduchý a má jenom několik možných vstupů (třeba číslo), je nejjednodušší vytvořit jejich seznam nebo najít jejich společné parametry a ostatní vstupy zablokovat (třeba pomocí parametru "type" HTML tagu).

Content-Security Policy

Lze zakázat třeba pomocí <meta> tagu zakázat načítání JavaScriptu sřetích stran nebo zakázat provádění inline scripty přímo v HTML. Stejně se v současné době pro přehlednost a lepší údržbu většinou ukládají scripty do souborů mimo HTML.


Příklad <meta> tagu:

<meta http-equiv="Content-Security-Policy" 

      content="script-src 'self' https://apis.tomasek.work/">

Příklad hlavičky:

Content-Security-Policy-Report-Only: script-src 'self'; report-uri https://tomasek.work/policy

Sanitizace HTML

U některých webů je důležité HTML vložené uživateli uložit bez úprav. V takovém případě je důležité použít nějaké knihovny zaručující, aby se kód nespustil.

Zdroje:

Je neetické zveřejňovat některé odkazy na darkweb. Jsou nahrazeny hvezdičkami (********).