Один із найпоширеніших класів уразливості на веб-сайтах називається «Міжсайтові сценарії» або «XSS». Уразливості XSS – це те, де користувач може викликати виконання JavaScript. Існує ряд різних варіантів уразливості XSS з різним ступенем тяжкості.
Проблема з тим, що зловмисник може виконувати JavaScript під час сеансів інших користувачів, полягає в тому, що зловмисник може зробити що-небудь із веб-сайтом, який бачать жертви. Це включає переспрямування жертв на зовнішні веб-сайти, крадіжку маркерів аутентифікації та моніторинг деталей платежу.
Найсерйознішою формою вразливості XSS є «збережені» або «постійні» міжсайтові сценарії, саме тут зловмисник може створити корисне навантаження XSS, а потім надіслати його, щоб він зберігався в базі даних. Якщо експлойт XSS збережений у базі даних, він може впливати на інших користувачів протягом тривалого періоду часу.
Іншою формою міжсайтових сценаріїв є «Відображений», цей тип не зберігається в жодному разі, натомість корисне навантаження включається в браузер. Як правило, цей тип XSS є частиною фішингових атак, коли зловмисник намагається обдурити жертву, щоб вона натиснула шкідливе посилання.
Як правило, більшість атак XSS мають корисне навантаження, яке в певний момент надсилається на сервер, але деякі атаки є виключно на стороні клієнта, ніколи не надсилаються на сервер і натомість впливають лише на клієнтський JavaScript. Це називається XSS на основі DOM, оскільки він залишається в об’єктній моделі документа JavaScript, або DOM. Цей тип уразливості особливо важко ідентифікувати та усунути, оскільки сервер ніколи не бачить експлойтів, а тому не може бути зареєстрований.
Історично метод запобігання уразливостям XSS полягав у фільтрації всіх даних, поданих користувачами, за допомогою списків блоків для відхилення будь-яких повідомлень із значущими символами або словами в JavaScript. Це, як правило, призводило до гонки озброєнь у пошуку обхідних засобів для фільтра, а також унеможливлювало деякі законні подання користувачів. Правильним рішенням є використання сутностей HTML для кодування даних, поданих користувачем. з увімкненими модулями сутностей HTML символи автоматично кодуються у формат, у якому браузер знає, щоб відображати їх як правильні символи, але не розглядати їх як код.