PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Как бороться с 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

Другие вопросы раздела