Един от най-често срещаните класове уязвимости в уебсайтовете се нарича „Cross-Site Scripting“ или „XSS“. XSS уязвимостите са там, където е възможно потребителят да предизвика изпълнение на JavaScript. Съществуват редица различни варианти на XSS уязвимост, с различна степен на сериозност.
Проблемът с това, че нападателят може да изпълнява JavaScript в сесиите на други потребители е, че тогава е възможно нападателят да направи каквото и да е на уебсайта, който жертвите виждат. Това включва пренасочване на жертвите към външни уебсайтове, кражба на токени за удостоверяване и наблюдение на данните за плащане.
Най-тежката форма на XSS уязвимост е „Съхранено“ или „Постоянно“ междусайтови скриптове, тук възможно е нападателят да създаде XSS полезен товар и след това да го изпрати, така че да бъде запазен в базата данни. С XSS експлойт, запазен в базата данни, тогава е възможно той да засегне други потребители за широк период от време.
Друга форма на междусайтови скриптове е „Отразена“, този тип не се запазва в нито един момент, вместо това полезният товар се включва в браузъра. Обикновено този тип XSS е част от фишинг атаки, при които нападателят се опитва да подмами жертвата да щракне върху злонамерена връзка.
По принцип повечето XSS атаки имат полезния товар, изпратен до сървъра в даден момент, но някои атаки са чисто от страна на клиента, никога не се изпраща на сървъра и вместо това засяга само от страна на клиента JavaScript. Това се нарича DOM-базиран XSS, тъй като остава в обектния модел на документа на JavaScript или DOM. Този тип уязвимост е особено труден за идентифициране и разрешаване, тъй като експлойтите никога не се виждат от сървъра и затова не могат да бъдат регистрирани.
Исторически техниката за превенция срещу XSS уязвимостите е да се филтрират всички подадени от потребителя данни, като се използват списъци с блокове, за да се отхвърлят всякакви съобщения със смислени знаци или думи в JavaScript. Това води до надпревара във въоръжаването за намиране на байпаси за филтъра, като същевременно предотвратява някои законни потребителски заявки. Правилното решение е да се използват HTML обекти за кодиране на подадени от потребителя данни. с активирани модули за HTML обекти, знаците автоматично се кодират във формат, в който браузърът знае да ги показва като правилни символи, но не и да ги третира като код.