Как бороться с XSS-атакой?
DOM и браузер
С XSS борются экранированием вывода, санитизацией HTML, автоэкранированием фреймворков, заголовком CSP и защитой токенов. Главный принцип — не доверять пользовательскому вводу.
Основные меры защиты
1. Экранировать вывод
Не вставлять сырой ввод в HTML; использовать textContent вместо innerHTML:
element.textContent = userInput; // безопасно
element.innerHTML = userInput; // опасно2. Автоэкранирование фреймворков
React/Vue экранируют по умолчанию: {userInput} безопасно. Опасен dangerouslySetInnerHTML/v-html.
3. Санитизация HTML
Если нужно вставлять HTML (например, из редактора), очищать его через DOMPurify:
element.innerHTML = DOMPurify.sanitize(dirtyHtml);4. Content-Security-Policy
Заголовок CSP блокирует инлайн-скрипты и скрипты с чужих доменов, даже если внедрены.
5. Защита cookie
HttpOnly — токен недоступен из JS, его сложнее украсть при XSS.
6. Валидация ввода
Проверять и ограничивать вход на клиенте и обязательно на сервере.
Коротко для собеседования
Против XSS: экранировать вывод (textContent, а не innerHTML), полагаться на автоэкранирование React/Vue (избегать dangerouslySetInnerHTML), санитизировать HTML через DOMPurify, включить CSP, хранить токены в HttpOnly cookie, валидировать ввод на сервере.
Подробнее: MDN — XSS