Что такое XSS (Cross-Site Scripting)
DOM и браузер
XSS (Cross-Site Scripting) — это уязвимость, при которой злоумышленник внедряет вредоносный JavaScript на страницу, и он выполняется в браузере других пользователей.
Как работает
Если пользовательский ввод выводится на страницу без экранирования, введённый скрипт исполнится:
// Уязвимо
element.innerHTML = userInput; // <script>steal()</script> выполнитсяСкрипт может украсть cookie/токены, выполнить действия от имени пользователя, подменить контент.
Виды XSS
- Stored (хранимый) — вредонос сохраняется на сервере (комментарий) и бьёт по всем.
- Reflected (отражённый) — приходит через параметр URL и отражается в ответе.
- DOM-based — уязвимость в клиентском JS, работающем с DOM.
Защита
- Экранировать вывод — не вставлять сырой ввод в HTML; использовать
textContentвместоinnerHTML. - Фреймворки — React/Vue экранируют по умолчанию (
{userInput}безопасно); опасенdangerouslySetInnerHTML. - Санитизация — DOMPurify для доверенного HTML.
- CSP (Content-Security-Policy) — ограничивает выполнение скриптов.
- HttpOnly cookie — токен недоступен из JS, сложнее украсть.
Коротко для собеседования
XSS — внедрение вредоносного JS в страницу через неэкранированный ввод; крадёт токены и действует от имени пользователя. Виды: stored, reflected, DOM-based. Защита: экранирование вывода (textContent, авто-экранирование React), санитизация (DOMPurify), CSP, HttpOnly cookie.
Подробнее: MDN — XSS