Co je XSS (Cross-Site Scripting)?
Cross-Site Scripting, nebo XSS, je bezpečnostní chyba na webových stránkách, která umožňuje útočníkům přidávat škodlivé skripty na webové stránky. Většinou jsou tyto skripty napsány v JavaScriptu.
Pokud někdo navštíví stránku postiženou XSS, jeho prohlížeč spustí útočníkův skript. To může vést ke krádeži cookies, únosu relací nebo akcím provedeným bez souhlasu uživatele.
XSS, podobně jako SQL Injection, je pravidelně uváděno v OWASP Top 10 jako jedna z nejčastějších zranitelností webových aplikací.
Jak XSS funguje?
XSS často cílí na webové aplikace, které nesprávně kontrolují a čistí uživatelský vstup.
Například, pokud pole pro komentáře umožňuje syrové HTML nebo JavaScript bez jakéhokoli filtrování, útočník by mohl přidat kód jako tento:
<script>alert('Hacked!');</script>
Když oběti zobrazí stránku, škodlivý kód se spustí v jejich prohlížeči.
Proč je XSS důležité v kybernetické bezpečnosti
XSS může vést k většímu narušení:
- Převzetí účtu (krádež session cookies k vydávání se za uživatele)
- Krádež dat (zachycení vstupů z formulářů jako hesla nebo kreditní karty)
- Phishingové útoky (vkládání falešných přihlašovacích formulářů)
- Doručení malwaru (přesměrování uživatelů na škodlivé webové stránky)
Typy XSS
- DOM-Based XSS
- Útok probíhá zcela v prohlížeči manipulací s Document Object Model (DOM) bez zapojení serveru.
- Uložené XSS
- Škodlivý skript je trvale uložen na serveru, například v databázi, na profilové stránce.
- Odražené XSS
- Skript je odražen z webového serveru (např. v URL nebo chybové zprávě), skript bude vykonán, když oběť klikne na útočníky vytvořený odkaz.
Jak zabránit XSS
- Sanitace vstupů a kódování výstupů: vždy čistit vstupní data uživatele před jejich zpracováním, transformovat vstupy uživatele do bezpečného formátu
- Použití Content Security Policy (CSP): omezuje, jaké skripty mohou být vykonány v prohlížeči.
- Vyhněte se eval() a inline JavaScriptu: ke snížení rizika injekcí.
- Bezpečnostní testování (DAST/IAST): provádět bezpečnostní testování k včasnému odhalení zranitelností
Příklad z reálného světa - Samy worm (MySpace, 2005)
Co se stalo: Samy Kamkar zveřejnil profil na MySpace, který obsahoval uložený XSS payload. Když si ostatní uživatelé prohlíželi profil, payload se spustil v jejich prohlížečích, (a) přidal Samyho jako přítele, (b) přidal frázi „Samy je můj hrdina“ na jejich profily a (c) replikoval se na stránky profilů těchto uživatelů.
Dopad: Červ se sám rozšířil na ~1 milion uživatelů během ~20 hodin, což dočasně donutilo MySpace k odstavení.
Proč to fungovalo: MySpace umožňoval neescapovaný HTML/atributy v polích profilů, což umožnilo uložené spuštění skriptů v prohlížečích návštěvníků.
Poučení / oprava: Správné kódování výstupu, sanitace vstupu, odstranění HTML v polích profilů a rychlé opravy. Samy později čelil právním důsledkům a MySpace nasadil filtry.
Související pojmy
- SQL Injection
- DAST (Dynamické testování bezpečnosti aplikací)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)