XSS (Cross-Site Scripting) це вразливість, коли застосунок виводить на сторінку дані від користувача без екранування, і серед них опиняється скрипт. Цей скрипт виконується у браузері кожного, хто відкрив сторінку. Це CWE-79.

Як це зустрічається на практиці

Класичний вхід це коментарі, імена, будь-який текст, який один користувач вводить, а інші бачать. Перше, що робить впроваджений скрипт, це забирає cookie сесії. Із чужою сесією пароль уже не потрібен.

Приклад

Замість імені користувач лишає:

Якщо вивід не екранований, кожен, хто відкрив сторінку з цим коментарем, віддає свою сесію на чужий сервер.

Як захиститись

  • Екрануйте будь-який користувацький вивід
  • Поставте заголовок Content-Security-Policy
  • Cookie сесії видавайте з прапорцями HttpOnly і Secure, щоб їх не читав скрипт