Útoky typu Stored Cross-Site Scripting (XSS) sú typom bezpečnostnej zraniteľnosti, ktorá sa vyskytuje vo webových aplikáciách.
Výrok „K útokom uložených XSS dochádza, keď je škodlivý skript zahrnutý do požiadavky webovej aplikácie a následne odoslaný späť používateľovi“ je nepravdivý. Aby sme pochopili, prečo je to tak, je nevyhnutné zvážiť mechaniku útokov Stored XSS a odlíšiť ich od iných typov útokov XSS, ako je napríklad Reflected XSS.
Uložené XSS, tiež známe ako perzistentné XSS, je typ útoku, pri ktorom je škodlivý skript trvalo uložený na cieľovom serveri, napríklad v databáze, fóre správ, denníku návštevníkov, poli komentárov alebo akomkoľvek inom mechanizme ukladania údajov. Kľúčovou charakteristikou Stored XSS je to, že škodlivý kód nie je zahrnutý len v jednom cykle žiadosti a odpovede, ale je uložený na serveri a následne poskytovaný používateľom, ktorí si vyžiadajú dotknutý obsah.
Aby sme to lepšie pochopili, zvážme typický scenár zahŕňajúci útok typu Stored XSS:
1. Vloženie škodlivého skriptu: Útočník odošle formulár vo webovej aplikácii, ktorá akceptuje vstup používateľa a uloží ho na server. Útočník by mohol napríklad uverejniť komentár na blogu alebo fóre, ktorý obsahuje škodlivý skript. Vstup môže vyzerať asi takto:
html <script>alert('XSS Attack!');</script>
Keď útočník odošle tento formulár, skript sa uloží do databázy aplikácie.
2. Ukladanie škodlivého skriptu: Webová aplikácia bez náležitého overenia a dezinfekcie vstupu uloží škodlivý skript do svojej databázy. Toto je kritický bod zlyhania, pretože aplikácia by mala v ideálnom prípade dezinfikovať akýkoľvek vstup používateľa pred jeho uložením, aby sa zabránilo takýmto útokom.
3. Spustenie škodlivého skriptu: Keď iní používatelia navštívia stránku, ktorá zobrazuje uložený obsah (napr. príspevok na blogu alebo vlákno fóra), webová aplikácia načíta údaje z databázy a zahrnie ich do odpovede odoslanej do prehliadača používateľa. Keďže skript je vložený do obsahu HTML, prehliadač používateľa ho vykoná ako súčasť vykresľovania stránky. To má za následok spustenie škodlivého skriptu v kontexte relácie používateľa, čo môže viesť k rôznym škodlivým výsledkom, ako napríklad:
– Krádež súborov cookie relácie, ktoré môžu útočníkovi umožniť uniesť reláciu používateľa.
– Vykonávanie akcií v mene používateľa bez jeho súhlasu (napr. vykonávanie neoprávnených transakcií).
– Presmerovanie používateľa na škodlivé webové stránky.
– Zobrazovanie podvodného obsahu s cieľom oklamať používateľa.
Naproti tomu Reflected XSS (alebo Non-Persistent XSS) zahŕňa okamžité odrazenie škodlivého skriptu späť k používateľovi ako súčasť odpovede na požiadavku. Pri útoku typu Reflected XSS nie je skript uložený na serveri, ale je zahrnutý do adresy URL alebo odoslania formulára a odráža sa späť v odpovedi servera. Napríklad:
1. Vytváranie škodlivej adresy URL: Útočník vytvorí adresu URL, ktorá obsahuje škodlivý skript ako parameter:
html http://example.com/search?q=<script>alert('XSS Attack!');</script>
2. Interakcia používateľa: Útočník oklame používateľa, aby klikol na škodlivý odkaz.
3. Odraz a prevedenie: Keď používateľ klikne na odkaz, webová aplikácia spracuje požiadavku a zahrnie škodlivý skript do odpovede. Prehliadač používateľa potom skript spustí.
Vzhľadom na tieto rozdiely je jasné, že Stored XSS zahŕňa uloženie škodlivého skriptu na server a jeho následné spustenie, keď sa uložený obsah načíta a zobrazí používateľom. Toto sa zásadne líši od Reflected XSS, kde sa skript neukladá, ale okamžite sa odráža späť k používateľovi.
Aby ste to ilustrovali na praktickom príklade, zvážte webovú aplikáciu, ktorá používateľom umožňuje uverejňovať komentáre k článkom. Ak aplikácia správne nedezinfikuje vstup používateľa, útočník by mohol uverejniť takýto komentár:
html Nice article! <script>alert('You have been hacked');</script>
Tento komentár sa uloží do databázy. Vždy, keď si ktorýkoľvek používateľ vrátane pôvodného útočníka pozrie článok a jeho komentáre, do odpovede HTML sa zahrnie značka skriptu. Prehliadač spustí skript a zobrazí sa výstražná správa „Boli ste napadnutí“.
Na zmiernenie útokov typu Stored XSS musia weboví vývojári implementovať robustné postupy overovania vstupu a kódovania výstupov. Niektoré odporúčané stratégie zahŕňajú:
- Overenie vstupu: Overte a dezinfikujte všetky vstupy používateľa, aby ste sa uistili, že neobsahujú škodlivé skripty. Dá sa to dosiahnuť umiestnením na bielu listinu prijateľných vstupných formátov a odmietnutím akéhokoľvek vstupu, ktorý nie je v súlade s týmito formátmi.
- Výstupné kódovanie: Zakódujte výstupné údaje, aby ste zabezpečili, že všetky potenciálne nebezpečné znaky budú prehliadačom neškodné. Napríklad konverzia „<“ na „<“ a „>“ na „>“ zabráni prehliadaču, aby ich interpretoval ako značky HTML.
- Zásady zabezpečenia obsahu (CSP): Implementácia CSP môže pomôcť zmierniť dopad útokov XSS obmedzením zdrojov, z ktorých je možné načítať a spustiť skripty.
Uložené XSS útoky zahŕňajú ukladanie škodlivých skriptov na server a ich spustenie, keď sa uložený obsah načíta a zobrazí používateľom. Toto sa líši od Reflected XSS, kde sa skript okamžite odrazí späť k používateľovi ako súčasť odpovede na požiadavku. Správna validácia vstupu, kódovanie výstupu a bezpečnostné zásady sú nevyhnutné na zabránenie takýmto zraniteľnostiam.
Ďalšie nedávne otázky a odpovede týkajúce sa Skriptovanie medzi lokalitami:
- Čo je to politika zabezpečenia obsahu (CSP) a ako pomáha znižovať riziko útokov XSS?
- Opíšte, ako môže útočník vložiť kód JavaScript maskovaný ako adresa URL na chybovú stránku servera, aby na stránke spustil škodlivý kód.
- Vysvetlite, ako možno AngularJS využiť na spustenie ľubovoľného kódu na webovej stránke.
- Ako útočník využíva zraniteľné vstupné pole alebo parameter na vykonanie opakovaného útoku XSS?
- Čo je to cross-site scripting (XSS) a prečo sa považuje za bežnú zraniteľnosť webových aplikácií?
- Aké je navrhované riešenie vo výskumnom dokumente „CSP je mŕtvy, nech žije CSP“ na riešenie výziev implementácie CSP?
- Aké sú obmedzenia a výzvy spojené s implementáciou CSP?
- Ako pomáha politika zabezpečenia obsahu (CSP) chrániť pred útokmi XSS?
- Aké sú bežné spôsoby obrany proti útokom XSS?
- Čo je to cross-site scripting (XSS) a prečo predstavuje významný bezpečnostný problém pre webové aplikácie?
Pozrite si ďalšie otázky a odpovede v Skriptovaní medzi stránkami