JavaScript Injection je typ útoku, při kterém útočník vloží nebo „injektuje“ vlastní JavaScriptový kód do webové aplikace. Pokud web není správně zabezpečen, škodlivý kód se může vykonat v prohlížeči jiného uživatele. Tento útok patří mezi techniky client-side injection a často souvisí s Cross-Site Scriptingem (XSS), což je jeho nejznámější podoba.
Jak JavaScript Injection funguje
K injekci dochází tehdy, když aplikace vezme vstup od uživatele (například komentář, URL, nebo jméno ve formuláři) a bez jeho filtrování nebo escapování ho zobrazí zpět na stránce. Pokud útočník místo textu zadá JavaScriptový kód, může dojít k jeho spuštění u jiného návštěvníka stránky.
Například:
Pokud stránka tento kód zobrazí jako součást HTML bez filtrování, spustí se alert a prokazuje, že JavaScript Injection byl úspěšný.
Typické scénáře zneužití
Krádež cookies – útočník získá session cookie jiného uživatele a může ho tím napodobit.
Přesměrování uživatelů – oběť je přesměrována na škodlivou stránku.
Zobrazení falešných formulářů – například podvodné přihlašovací okno pro phishing.
Instalace keyloggeru – zaznamenávání stisků kláves na stránce.
Manipulace s obsahem webu – útočník může měnit HTML strukturu a ovlivnit, co uživatel vidí.
Rozdíl mezi JavaScript Injection a XSS
Tyto dva pojmy jsou úzce propojené. XSS (Cross-Site Scripting) je konkrétní typ JavaScript Injection útoku, při kterém je kód vykonán na straně klienta – v prohlížeči jiného uživatele. JavaScript Injection je širší pojem, který může zahrnovat i injekce v prostředí vývojářských nástrojů, bookmarkletů nebo i REST API endpointů.
Známé případy
MySpace worm (2005)
Útočník Samy Kamkar vytvořil „červa“, který se šířil přes MySpace profily. Jakmile někdo navštívil infikovaný profil, JavaScript automaticky přidal červa na jeho vlastní profil. Během jednoho dne infikoval více než 1 milion účtů.
Samy byl následně odsouzen, dostal zákaz používání počítačů na několik let a stal se známým bezpečnostním výzkumníkem.
Více info: samy.plBritish Airways (2018)
Hackeři injektovali JavaScript do platební stránky pomocí útoku na knihovnu třetí strany. Skript odesílal údaje z platebních karet útočníkům. Byl kompromitován server se statickým obsahem. Únik postihl více než 380 000 uživatelů.
Firma dostala pokutu přes 20 milionů liber podle GDPR.
Jak se bránit
Escapování výstupu
Nikdy nevkládejte uživatelský vstup do HTML bez escapování. Například pomocí htmlspecialchars()
v PHP nebo knihoven jako DOMPurify v JavaScriptu.
Content Security Policy (CSP)
HTTP hlavička, která omezuje odkud se mohou načítat skripty. Např. zakázání inline skriptů ('unsafe-inline'
) pomáhá proti XSS.
Ověřování vstupu (input validation)
Zamezte použití speciálních znaků (<
, >
, "
apod.) ve formulářích, pokud nejsou potřeba.
Používání bezpečných frameworků
Moderní frontendové frameworky jako React, Vue nebo Angular mají vestavěné mechanismy pro ochranu proti XSS (např. automatické escapování).
Sanitizace dat
Pokud aplikace zpracovává HTML od uživatelů (např. blogy, komentáře), použijte knihovny na sanitizaci – odstranění nebezpečných tagů a atributů.
Nástroje pro detekci
OWASP ZAP – open-source nástroj pro testování zranitelností webových aplikací.
Burp Suite – profesionální nástroj pro penetrační testery s podporou XSS testování.
XSS Hunter – nástroj pro sledování a reportování injektovaných XSS payloadů.
Shrnutí
JavaScript Injection je nebezpečná zranitelnost, která umožňuje útočníkovi spustit vlastní kód v prohlížeči oběti. Ačkoliv nejčastější formou je XSS, existují i jiné varianty. Webové aplikace by měly být důsledně testovány na podobné chyby a vývojáři by měli důsledně validovat a escapovat uživatelský vstup. I jeden nechráněný vstupní bod může vést k rozsáhlému narušení bezpečnosti.