Генератор заголовков безопасности
Выберите веб-сервер и защиту, которую нужно включить. Генератор запишет Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy и Cross-Origin-Opener-Policy в правильном синтаксисе — останется вставить в конфигурацию сайта.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Выберите сервер: nginx, Apache, Caddy или простой список заголовков.
- Включите нужные заголовки и выберите значения. Для HSTS есть короткие сроки для проверки и сроки в год или два.
- Скопируйте результат в конфигурацию, перезагрузите сервер и проверьте ответ командой
curl -I.
Что делает каждый заголовок
| Заголовок |
Защищает от |
| Strict-Transport-Security |
понижения до HTTP и кражи cookie в открытом Wi-Fi |
| X-Frame-Options |
кликджекинга через невидимые фреймы |
| X-Content-Type-Options: nosniff |
«угадывания» браузером, что файл — скрипт или стиль |
| Referrer-Policy |
утечки полных адресов с токенами и ID на другие сайты |
| Permissions-Policy |
запросов камеры, микрофона и геолокации из встроенного контента |
| Cross-Origin-Opener-Policy |
доступа чужих окон к вашему (межоконные атаки) |
Пример
С настройками по умолчанию и сервером nginx генератор выдаёт:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Слово always заставляет nginx добавлять заголовки и к страницам ошибок.
Частые ошибки
- add_header внутри location отменяет для этого location все add_header, унаследованные из server. Повторите их там или держите в одном месте.
- Слишком ранний preload. Убрать домен из списка предзагрузки можно только за месяцы.
- Запрет нужной функции. Permissions-Policy здесь отключает камеру, микрофон и геолокацию для всех источников, включая ваши страницы; если сайту они нужны, не включайте его.
Частые вопросы
Какие заголовки безопасности нужны каждому сайту?
Обычный минимум — Strict-Transport-Security для сайтов на HTTPS, X-Content-Type-Options: nosniff, X-Frame-Options или правило CSP frame-ancestors против кликджекинга и Referrer-Policy. Больше всего защищает Content-Security-Policy, но её нужно настраивать под сайт — соберите её в конструкторе CSP.
Безопасно ли включать HSTS?
Только когда весь сайт, а с includeSubDomains — и все поддомены, работают по HTTPS. Браузеры будут отказываться от HTTP на весь срок max-age. Начните с 5 минут или дня, всё проверьте и только потом поднимайте до года.
Что даёт preload?
Это заявка на включение в встроенный в браузеры список HSTS preload, чтобы HTTPS использовался даже при первом визите. Список требует max-age не меньше 31536000, includeSubDomains и preload, а домен отправляют на hstspreload.org. Исключение из списка занимает много времени, поэтому решайте осознанно.
DENY или SAMEORIGIN для X-Frame-Options?
DENY запрещает показывать ваши страницы во фрейме любым сайтам, включая ваш. SAMEORIGIN разрешает фреймы только с вашего же источника. Если нужно разрешить конкретные чужие сайты, используйте директиву CSP frame-ancestors.
Почему X-XSS-Protection равен 0?
В современных браузерах XSS-фильтра, которым управлял этот заголовок, уже нет, а в старых сам фильтр можно было использовать для атак. Значение 0 выключает его там, где он ещё остался; современная защита — Content-Security-Policy.