Jedna z najbežnejších tried zraniteľnosti na webových stránkach sa nazýva „Cross-Site Scripting“ alebo „XSS“. Chyby zabezpečenia XSS sú miesta, kde môže používateľ spôsobiť spustenie JavaScriptu. Existuje množstvo rôznych variantov zraniteľnosti XSS s rôznym stupňom závažnosti.
Problém s tým, že útočník dokáže spustiť JavaScript v reláciách iných používateľov, je ten, že útočník môže urobiť čokoľvek s webovou stránkou, ktorú uvidia obete. To zahŕňa presmerovanie obetí na externé webové stránky, krádež autentifikačných tokenov a sledovanie platobných údajov.
Najzávažnejšou formou zraniteľnosti XSS je „Uložené“ alebo „Trvalé“ Cross-Site Scripting, v tomto prípade je možné, že útočník vytvorí užitočné zaťaženie XSS a potom ho odošle, takže sa uloží do databázy. S exploitom XSS uloženým v databáze je potom možné, aby ovplyvnil ostatných používateľov počas širokého časového obdobia.
Ďalšou formou Cross-Site Scriptingu je „Reflection“, tento typ sa neukladá v žiadnom bode, namiesto toho je obsah zahrnutý v prehliadači. Tento typ XSS je zvyčajne súčasťou phishingových útokov, pri ktorých sa útočník pokúša oklamať obeť, aby klikla na škodlivý odkaz.
Vo všeobecnosti väčšina útokov XSS má v určitom okamihu odoslané zaťaženie na server, ale niektoré útoky sú čisto na strane klienta, nikdy sa neposielajú na server a namiesto toho ovplyvňujú iba JavaScript na strane klienta. Toto sa nazýva XSS založené na DOM, pretože zostáva v objektovom modeli dokumentu JavaScript alebo DOM. Tento typ zraniteľnosti je obzvlášť ťažké identifikovať a vyriešiť, pretože server nikdy neuvidí zneužitia, a preto ich nemožno zaprotokolovať.
Technikou prevencie pred zraniteľnosťami XSS je v minulosti filtrovanie všetkých údajov odoslaných používateľmi pomocou zoznamov blokovaných údajov na odmietnutie všetkých správ so zmysluplnými znakmi alebo slovami v jazyku JavaScript. To malo tendenciu viesť k pretekom v zbrojení pri hľadaní obchvatov pre filter, pričom sa tiež zabránilo niektorým legitímnym užívateľským príspevkom. Správnym riešením je použiť entity HTML na kódovanie údajov odoslaných používateľom. s povolenými modulmi entít HTML sa znaky automaticky kódujú do formátu, v ktorom prehliadač vie, že ich má zobraziť ako správne symboly, ale nepovažuje ich za kód.