Ответ
- Экранирование (escaping) – преобразование спецсимволов в HTML-сущности (например,
<→<).
Пример:
const escaped = str.replace(/</g, '<').replace(/>/g, '>');
- Использование textContent вместо innerHTML – предотвращает интерпретацию HTML/JS.
element.textContent = userInput; // безопасно
- Content Security Policy (CSP) – HTTP-заголовок, ограничивающий источники скриптов, стилей и т.д.
Пример заголовка:
Content-Security-Policy: default-src 'self'
- Библиотеки для санитизации – например, DOMPurify:
const clean = DOMPurify.sanitize(userInput);
-
HttpOnly и Secure флаги для кук – защищает от кражи кук через JS.
-
Валидация и ограничение ввода – например, разрешать только определенные символы.
Для React/Vue/Angular: фреймворки автоматически экранируют данные в шаблонах, но важно избегать dangerouslySetInnerHTML (React) или v-html (Vue) без санитизации.