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é“ skriptovanie medzi stránkami. 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é, že ovplyvní ostatných používateľov počas širokého časového obdobia.
Ďalšou formou Cross-Site Scriptingu je „Odzrkadlené“, tento typ sa v žiadnom bode neukladá, 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 sa pri väčšine útokov XSS v určitom momente prenáša užitočné zaťaženie na server, ale niektoré útoky sú čisto na strane klienta, nikdy sa neposiela na server a namiesto toho ovplyvňuje iba stranu klienta JavaScript. 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 nevidí zneužitia, a preto ich nemožno zaznamenať.
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.