SiteScan.top

HTTP-заголовки безопасности: минимум, который стоит включить сегодня

CSP, HSTS, X-Content-Type-Options и компания: что реально защищает, что устарело и в каком порядке внедрять без поломок.

Безопасность · Опубликовано: 10 июня 2026 г. · 2 мин чтения · Марк Лебедев

Заголовки безопасности — редкий случай, когда несколько строк в конфиге закрывают целые классы атак. И редкий случай, когда неаккуратное внедрение ломает сайт за секунду. Поэтому порядок важен не меньше содержания.

Начните с безопасных

Эти три можно включать почти без риска:

X-Content-Type-Options: nosniff — запрещает браузеру угадывать тип содержимого. Закрывает сценарий, где загруженный пользователем «текстовый» файл исполняется как скрипт.

Referrer-Policy: strict-origin-when-cross-origin — перестаёт утекать полный путь страницы в чужую аналитику. Сегодня это дефолт в большинстве браузеров, но явное указание надёжнее.

Strict-Transport-Security: max-age=31536000; includeSubDomains — HSTS, обязывает браузер ходить только по HTTPS. Внимание: включайте, только если весь сайт и все поддомены уже работают по HTTPS. Откатить это нельзя быстро — браузеры помнят заголовок весь max-age. Начните с max-age=300, убедитесь, что ничего не сломалось, и повышайте.

CSP — самый полезный и самый опасный

Content-Security-Policy определяет, откуда разрешено грузить скрипты, стили и картинки. Она блокирует большинство XSS, и она же ломает сайт, если политика написана наугад.

Правильный путь — в три шага:

  1. Включите режим наблюдения: Content-Security-Policy-Report-Only с адресом для отчётов. Ничего не блокируется, но вы видите, что было бы заблокировано.
  2. Соберите отчёты за пару недель, добавьте в политику всё легитимное — виджеты, шрифты, аналитику.
  3. Переключите на боевой заголовок.

Минимальная разумная политика для сайта без inline-скриптов:

Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data:; frame-ancestors 'none'; base-uri 'self'

Директива frame-ancestors 'none' заменяет устаревший X-Frame-Options и закрывает кликджекинг.

Что уже не нужно

X-XSS-Protection — устаревший заголовок, современные браузеры его игнорируют, а в старых он сам был источником уязвимостей. Feature-Policy переименован в Permissions-Policy.

Как проверять

Заголовки задаются на нескольких уровнях — CDN, обратный прокси, приложение — и легко теряются или дублируются при изменении инфраструктуры. Проверяйте не конфиг, а реальный ответ на нескольких типах URL: главная, страница из SPA-роутинга, статический файл, API-эндпоинт. Разница между ними — самая частая находка аудита.

И следите за регрессиями: заголовок, случайно снятый при переезде на новый CDN, никак себя не проявит, пока не станет поздно.

Читайте также

Проверьте, что из этого есть на вашем сайте

Бесплатное сканирование покажет битые ссылки, ошибки JS и проблемы производительности за минуту.