HSTS (HTTP Strict Transport Security) — заголовок, который инструктирует браузер всегда использовать HTTPS для вашего домена, даже если пользователь набрал http://. Это защита от SSL-stripping атак и случайного перехода по HTTP.
Как работает HSTS
- Браузер впервые посещает сайт по HTTPS
- Получает заголовок
Strict-Transport-Security - Сохраняет домен в список HSTS на время max-age
- При следующем визите — автоматически открывает HTTPS без редиректа с сервера
Настройка через .htaccess
<IfModule mod_headers.c>
# Базовый HSTS: 1 год
Header always set Strict-Transport-Security "max-age=31536000"
# С включением поддоменов
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# С preload (для включения в браузерный список)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>
Настройка через Nginx
server {
listen 443 ssl;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}
⚠️ Начните с
max-age=300 (5 минут) для тестирования. Переключитесь на 31536000 только после того, как убедитесь что HTTPS работает идеально на всех поддоменах.HSTS Preload
Директива preload позволяет добавить домен в встроенные списки браузеров. Это означает, что HTTPS будет форсироваться даже при первом посещении (до получения заголовка):
- Подать заявку: hstspreload.org
- Требования: max-age не менее 1 года, includeSubDomains, действующий HTTPS на поддоменах
💡 После включения в preload-список удаление занимает месяцы. Добавляйте только если уверены, что HTTPS будет постоянным.
Проверка HSTS
# curl
curl -I https://example.com | grep Strict
# Или Chrome DevTools:
# Network → ваш запрос → Response Headers → Strict-Transport-Security