Что такое заголовки безопасности?
HTTP-заголовки безопасности задают браузеру правила обработки контента и соединения. Они снижают риск атак, но не заменяют безопасный код и контроль доступа.
Основные заголовки безопасности
HSTS и строгий HTTPS-режим
HSTS принуждает браузер использовать HTTPS после получения корректного заголовка. Проверяйте срок и preload до включения.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
CSP и политика источников
CSP ограничивает источники скриптов, стилей, изображений и соединений. Начните с Report-Only и добавляйте исключения осознанно.
Content-Security-Policy: default-src 'self'; script-src 'self' trusted.com; style-src 'self' 'unsafe-inline'
Ограничение фреймов
DENY или SAMEORIGIN ограничивает встраивание и снижает clickjacking.
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
Защита MIME-типа
nosniff запрещает угадывание MIME-типа и неожиданное исполнение контента.
X-Content-Type-Options: nosniff
Дополнительные заголовки безопасности
Referrer-Policy ограничивает передачу URL, Permissions-Policy отключает ненужные возможности браузера, а Cache-Control защищает чувствительные ответы от кэширования.
| Заголовок | Назначение | Пример значения |
|---|---|---|
| Заголовок безопасности X-XSS-Protection | Фильтр XSS (устаревший) | 1; mode=block |
| Заголовок безопасности Referrer-Policy | Управление данными referrer | strict-origin-when-cross-origin |
| Заголовок безопасности Permissions-Policy | Ограничения функций | geolocation=(), camera=() |
| Заголовок безопасности Cross-Origin-Opener-Policy | Изоляция процессов | same-origin |
| Заголовок безопасности Cross-Origin-Embedder-Policy | Изоляция ресурсов | require-corp |
Примеры реализации
Конфигурация Nginx
Добавьте заголовки на нужном уровне, проверьте наследование, ошибки и отсутствие дублирования после redirect.
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'" always;
Конфигурация Apache
Проверяйте mod_headers, виртуальный host и результат конечного HTTPS-ответа, а не только файл конфигурации.
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Заголовки и состояние домена
Почему заголовки важны для доменов
Корректные заголовки укрепляют защиту сайта, но DNS, TLS и почтовая конфигурация требуют отдельных проверок.
Проверка заголовков
Проверяйте curl и браузером разные пути, кэш, redirect и ошибки. Фиксируйте timestamp и точный ответ.
Лучшие практики
Тестируйте политики в staging, документируйте владельца, избегайте широких wildcard и отслеживайте изменения после каждого релиза.
Частые критерии оценки
Оценивайте наличие, корректность, область действия, совместимость, отсутствие секретов и подтверждённый результат, а не только строку в конфигурации.
| Оценка | Типичные требования |
|---|---|
| A+ | Все критические заголовки, HSTS preload |
| A | HSTS, CSP, X-Frame-Options, X-Content-Type |
| B | Некоторые заголовки отсутствуют |
| C/D | Минимальный набор заголовков безопасности |
| F | Заголовки безопасности отсутствуют |