Большинство владельцев сайтов знают про HTTPS. Но HTTPS — это только первый уровень защиты. Есть ещё 6 HTTP-заголовков, которые защищают сайт от атак, о которых вы могли не слышать: кликджекинг, XSS, MIME-sniffing, утечка реферера и другие.
Разберём каждый заголовок: что это, зачем, что будет, если его нет, и как проверить свой сайт.
Это специальные заголовки, которые сервер отправляет браузеру вместе со страницей. Они говорят браузеру: «Вот правила, как обрабатывать этот сайт». Если заголовков нет — браузер использует настройки по умолчанию, которые менее безопасны.
Проверить свои заголовки можно в DevTools (F12) → вкладка Network → выбрать главный запрос → Headers, либо через бесплатный экспресс-аудит TetraHand — он показывает все заголовки сразу.
Зачем нужен: защищает от атак типа SSL-stripping. Злоумышленник перехватывает трафик, подменяет HTTPS на HTTP и перехватывает пароли и данные.
Что будет, если его нет: злоумышленник в публичном Wi-Fi (кафе, аэропорт) может перехватить сессию пользователя. Подробнее — в отдельной статье.
Как выглядит:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Как настроить в nginx:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Зачем нужен: главная защита от XSS-атак (Cross-Site Scripting). Если злоумышленник внедрит скрипт на вашу страницу — CSP заблокирует его выполнение, потому что домен не в белом списке.
Что будет, если его нет: при XSS-атаке злоумышленник может украсть cookie пользователя, перенаправить его на фишинговый сайт, выполнить любые действия от его имени.
Пример:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' 'unsafe-inline'
Важно: CSP — самый сложный заголовок. Неправильная настройка может сломать сайт (например, если у вас inline-скрипты, а CSP их запрещает). Начните с режима Content-Security-Policy-Report-Only — он только логирует нарушения, не блокирует.
Зачем нужен: защита от кликджекинга. Злоумышленник встраивает ваш сайт в свой iframe, накладывает сверху прозрачные кнопки — и пользователь, думая, что кликает по вашему сайту, на самом деле нажимает «Перевести деньги» или «Подтвердить заказ».
Что будет, если его нет: любой сайт может встроить ваш сайт в iframe и обманывать пользователей от вашего имени.
Значения:
DENY — запретить встраивание всегда (максимальная защита).SAMEORIGIN — разрешить только вашему домену (рекомендуется).ALLOW-FROM https://example.com — разрешить конкретному домену (устаревшее).Как настроить в nginx:
add_header X-Frame-Options "SAMEORIGIN" always;
Зачем нужен: защита от MIME-sniffing атак. Без этого заголовка браузер может «подумать», что ваш текстовый файл — это HTML или JavaScript, и выполнить его.
Что будет, если его нет: злоумышленник загружает на ваш сайт файл (например, через форму загрузки аватара), браузер определяет его как HTML и выполняет — это открывает путь к XSS.
Как настроить в nginx:
add_header X-Content-Type-Options "nosniff" always;
Зачем нужен: защита приватности и предотвращение утечек. Без этого заголовка браузер передаёт полный URL вашей страницы на все внешние сайты. Если у вас в URL есть токены, ID пользователя, параметры — они утекут.
Что будет, если его нет: ссылки на внешние сайты передают полный URL вашей страницы. Если пользователь переходит с /reset?token=abc123 на внешний сайт — токен утечёт в логи этого сайта.
Рекомендуемое значение:
Referrer-Policy: strict-origin-when-cross-origin
Как настроить в nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
Зачем нужен: если злоумышленник внедрит скрипт на вашу страницу — он может запросить доступ к камере или микрофону пользователя. Permissions-Policy блокирует это.
Что будет, если его нет: XSS-скрипт может запросить доступ к геолокации, камере, микрофону. Пользователь может неосознанно дать разрешение.
Пример:
Permissions-Policy: geolocation=(), microphone=(), camera=(), payment=(self)
Это значит: геолокация, микрофон, камера — полностью запрещены. Payment API разрешён только для вашего домена.
| Заголовок | Защищает от | Приоритет |
|---|---|---|
| HSTS | SSL-stripping, перехват трафика | 🔴 Критично |
| CSP | XSS-атак | 🔴 Критично |
| X-Frame-Options | Кликджекинга | 🟠 Важно |
| X-Content-Type-Options | MIME-sniffing | 🟠 Важно |
| Referrer-Policy | Утечки URL и токенов | 🟡 Желательно |
| Permissions-Policy | Доступ к камере, микрофону, геолокации | 🟡 Желательно |
Бесплатный экспресс-аудит за 2 минуты: покажет все заголовки, SSL, открытые файлы
Проверить сайт →Откройте сайт в Chrome → F12 → вкладка Network → обновите страницу → выберите главный запрос → Headers. Ищите заголовки в разделе Response Headers.
Введите URL на главной — получите отчёт за 2 минуты. В разделе «Безопасность» будут все 6 заголовков с цветовой индикацией.
Бесплатный сервис от Scott Helme. Показывает оценку от A до F и рекомендации.
Если у вас нет ни одного из этих заголовков — начните с трёх:
CSP — сложнее. Начните с Report-Only режима, посмотрите логи, потом включите полностью.
Заголовки безопасности — это бесплатная защита, которую большинство сайтов игнорирует. Настройка занимает 5 минут, а эффект — снижение риска взлома в разы.
Проверьте свой сайт: запустите бесплатный экспресс-аудит и посмотрите, какие заголовки отсутствуют. Если хотите глубже — закажите полный аудит безопасности с ручной верификацией.