JavaScript Injection: útok skrze vkládání škodlivého kódu do webových stránek

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:

				
					<script>alert("Byl jsem injektován!")</script>

				
			

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.pl

  • British 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.

Pokud mi chcete napsat rychlou zprávu, využije, prosím, níže uvedený
kontaktní formulář. Děkuji.

Další Kontaktní údaje