Medzistránkové skriptovanie (cross-site scripting)

Aktualizované Sep 22, 2026

Cross-site scripting alebo XSS je zraniteľnosť, pri ktorej sa nedôveryhodný obsah dostane na webovú stránku a prehliadač ho vyhodnotí ako vykonateľný kód. Tento kód beží v kontexte dôveryhodného webu, čo môže viesť k odhaleniu dát na stránke, konaniu v mene prihláseného používateľa alebo k zmene zobrazovaného obsahu.

K zraniteľnosti cross-site scripting dochádza vtedy, keď webová aplikácia umiestni nedôveryhodný obsah do stránky bez zachovania hranice medzi dátami a vykonateľným kódom. Prehliadač potom spúšťa injektovaný obsah s oprávneniami napadnutého webu. Zraniteľná cesta sa môže nachádzať na serveri, v kóde na strane klienta alebo môže prechádzať oboma časťami.

Tri cesty do prehliadača

Uložený (stored) cross-site scripting začína vtedy, keď aplikácia uloží obsah a neskôr ho vykreslí pri inej požiadavke. Reflektovaný (reflected) cross-site scripting vracia údaje požiadavky priamo v odpovedi. Klientsky (DOM-based) cross-site scripting nastáva vtedy, keď klientsky kód prehliadača prečíta nedôveryhodnú hodnotu a odovzdá ju nebezpečnej operácii vykresľovania.

Pri audite vibe-coded softvéru sa sleduje každý zdroj až na miesto, kde ho prehliadač použije. Preskúmanie zahŕňa bežné textové polia, ale aj URL adresy, chybové správy, názvy súborov, dáta z integrácií, formátovaný text a administrátorské obrazovky.

Cesta XSSZdroj dátBod vykonania
Uložená (stored)Databáza, nahrávanie, integráciaNeskoršie vykreslenie stránky
Reflektovaná (reflected)Query, routa, požiadavka z formuláraOkamžitá odpoveď servera
DOM-basedURL, úložisko, udalosť správyKód vykresľovania na strane klienta
ZmiešanáUložené alebo reflektované serverové dátaNeskoršia transformácia na strane klienta

Kontext vykresľovania určuje spôsob ochrany

Správna ochrana závisí od toho, kde sa hodnota zobrazuje. HTML text, atribút, URL, CSS a JavaScript predstavujú rôzne kontexty syntaktickej analýzy. Transformácia, ktorá je bezpečná pre jeden kontext, môže byť nebezpečná pre iný. Moderné frameworky predvolene ošetrujú bežný text, no explicitné vykresľovanie HTML, obchádzanie šablón, pluginy pre formátovaný text a priame operácie s DOM môžu z tohto predvoleného nastavenia vybočiť.

Validácia vstupov naďalej definuje, čo produkt prijíma. Kódovanie výstupu a bezpečné vykresľovanie zachovávajú hranice prehliadača, aj keď prijatý text obsahuje interpunkciu alebo znaky pripomínajúce značkovací jazyk. Ak produkt zámerne prijíma HTML, sanitizácia musí využívať jasne definované pravidlá (policy), a nie iba zoznam odstraňovaných reťazcov.

Čo audit sleduje

Preskúmanie pristupuje ku cross-site scriptingu ako k otázke toku dát:

  1. Zoznam nedôveryhodných zdrojov: Zahrňte požiadavky, úložiská, integrácie, nahrávania súborov a správy prehliadača.
  2. Vyhľadanie miest vykresľovania (sinks): Preskúmajte priame HTML API, obchádzanie šablón, tvorbu skriptov a nebezpečné spracovanie URL adries.
  3. Identifikácia kontextu: Zaznamenajte, ako bude prehliadač analyzovať hodnotu na danom mieste.
  4. Overenie kontroly: Skontrolujte ošetrenie frameworkom, kontextové kódovanie alebo sanitizáciu na konečnej hranici.
  5. Testovanie celej cesty: Otestujte uložené aj klientske transformácie, nielen prvú požiadavku.

Prečo vygenerované rozhrania potrebujú úplné sledovanie

Vygenerovaný komponent môže vyzerať bezpečne, pretože bežné dáta vytvárajú bežný značkovací kód. Slabina sa prejaví až vtedy, keď hodnota prejde kontextom, ktorý pôvodný prompt nepopisoval. Opakujúci sa pomocný kód môže tiež jednu obrazovku kódovať správne, zatiaľ čo na inej ho formátovanie obíde.

Mapa útočnej plochy zobrazuje každé miesto, kde obsah vstupuje a kde sa vykresľuje. Testy následne potvrdzujú, že nedôveryhodné hodnoty zostávajú čistými dátami pozdĺž celej trasy. Tento dôkaz je súčasťou produkčného posúdenia, ktoré sa vyžaduje, keď sa rýchlo vygenerovaný softvér mení na udržiavaný systém.