Skip to content
← Все статьи

Заголовки безопасности: CSP, HSTS, X-Frame-Options и другие

проверку HTTP-заголовков безопасности — это первая линия защиты вашего сайта от распространённых веб-атак: XSS, clickjacking, MIME-SNI и перехвата трафика. Правильная настройка занимает минуты, а защищает от большинства атак из OWASP Top 10.

Content-Security-Policy (CSP)

Самый мощный заголовок безопасности. Content Security Policy контролирует, откуда браузер может загружать ресурсы — скрипты, стили, шрифты, изображения, фреймы и другие:

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; frame-ancestors 'none'

Основные директивы CSP

ДирективаЧто контролирует
default-srcИсточник по умолчанию для всех типов ресурсов
script-srcОткуда можно загружать JavaScript
style-srcОткуда можно загружать CSS
img-srcОткуда можно загружать изображения
font-srcОткуда можно загружать шрифты
connect-srcКуда можно отправлять AJAX/Fetch/WebSocket запросы
frame-srcОткуда можно загружать iframe
frame-ancestorsКто может встраивать вашу страницу в iframe
base-uriДопустимые URL для тега <base>
form-actionКуда разрешено отправлять формы

Значения источников

  • 'self' — только текущий домен
  • 'none' — запрещено полностью
  • 'unsafe-inline' — разрешены инлайн-скрипты/стили (снижает защиту)
  • 'unsafe-eval' — разрешён eval() (опасно)
  • 'nonce-abc123' — разрешены элементы с указанным nonce
  • 'strict-dynamic' — скрипты, загруженные доверенными скриптами, тоже доверенные
  • https: — любой SSL/TLS проверку источник
  • https://cdn.example.com — конкретный домен

Режим отчётов

Начните с режима отчётов, чтобы не сломать сайт:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report

Браузер будет логировать нарушения, но не блокировать ресурсы.

Strict-Transport-Security (HSTS)

Заставляет браузер всегда использовать HTTPS для вашего домена, даже если пользователь набрал http://:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=63072000 — запоминать на 2 года (в секундах)
  • includeSubDomains — применять ко всем поддоменам
  • preload — включить в предзагрузочный список браузеров (HSTS.org)

Важно: перед включением HSTS убедитесь, что весь сайт работает по HTTPS. После включения откатить будет сложно — браузеры запомнят директиву.

X-Frame-Options

Защищает от clickjacking — атаки, когда ваш сайт встраивают в невидимый iframe:

X-Frame-Options: DENY
ЗначениеОписание
DENYПолный запрет встраивания в iframe
SAMEORIGINРазрешено только с того же домена
ALLOW-FROM uriРазрешено с указанного URL (устарело, не поддерживается в Chrome)

Современная замена — CSP директива frame-ancestors.

X-Content-Type-Options

Запрещает браузеру «угадывать» MIME-тип содержимого (MIME-sniffing):

X-Content-Type-Options: nosniff

Без этого заголовка браузер может интерпретировать текстовый файл как JavaScript и выполнить его — классический вектор XSS-атаки.

Referrer-Policy

Контролирует, какая информация передаётся в заголовке Referer при переходе на другие сайты:

Referrer-Policy: strict-origin-when-cross-origin
ЗначениеОписание
no-referrerReferer не передаётся вообще
originПередаётся только домен (без пути)
strict-origin-when-cross-originПолный URL для своего домена, только домен для других (рекомендуется)
same-originReferer только для запросов к своему домену
no-referrer-when-downgradeНе передавать при переходе с HTTPS на HTTP

Permissions-Policy

Контролирует доступ к API документацию браузера — камера, микрофон, IP геолокацию, полноэкранный режим и другие:

Permissions-Policy: camera=(), microphone=(), geolocation=(self), fullscreen=(self)

Пустые скобки () полностью запрещают функцию. (self) разрешает только для текущего домена.

X-XSS-Protection

Активирует встроенный XSS-фильтр браузера (устаревший, но полезен для старых версий IE):

X-XSS-Protection: 1; mode=block

Современные браузеры полагаются на CSP вместо этого заголовка, но его стоит включить для обратной совместимости.

Рекомендуемый набор заголовков

Минимальный набор заголовков безопасности для любого сайта:

# Nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'" always;
# Apache (.htaccess)
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'"

Как проверить заголовки безопасности

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

Проверьте ваш сайт прямо сейчас

Проверить безопасность сайта →
Другие статьи: Безопасность
Безопасность
DMARC в 2026: ужесточение Gmail/Yahoo
15.06.2026 · 47 просм.
Безопасность
Cloudflare Error 1020 Access Denied: как исправить
23.06.2026 · 74 просм.
Безопасность
Открытые порты сервера: как проверить и почему это важно для безопасности
13.03.2026 · 150 просм.
Безопасность
Стратегии ограничения частоты запросов для веб-API
16.03.2026 · 131 просм.