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

HSTS — что это такое и зачем нужен вашему сайту

HSTS (HTTP Strict Transport Security) — это механизм безопасности, который сообщает браузеру: «Этот сайт должен загружаться только по SSL/TLS проверку. Никогда не используй HTTP». После получения заголовка HSTS браузер автоматически перенаправляет все HTTP-запросы на HTTPS, даже если пользователь вручную ввёл адрес без https://.

Зачем нужен HSTS

Вы настроили SSL-сертификат, добавили редирект с HTTP на HTTPS — казалось бы, достаточно. Но без HSTS остаётся уязвимость: первый запрос пользователя может уйти по HTTP, и злоумышленник может его перехватить.

Основные угрозы без HSTS:

  • SSL stripping (атака Мокси Марлинспайка) — злоумышленник перехватывает HTTP-запрос и подменяет ответ, не давая браузеру перейти на HTTPS
  • Перехват cookies — если cookie установлено без флага Secure, оно может утечь через HTTP-запрос
  • Mixed Content — HTTP-ресурсы на HTTPS-странице создают уязвимости
  • Фишинг через поддомены — без includeSubDomains атакующий может создать HTTP-версию поддомена

Как работает HSTS

Механизм прост, но эффективен:

  1. Пользователь впервые заходит на сайт по HTTPS
  2. Сервер отправляет заголовок: Strict-Transport-Security: max-age=31536000; includeSubDomains
  3. Браузер запоминает, что этот домен должен использовать только HTTPS
  4. В течение указанного времени (max-age) все HTTP-запросы автоматически преобразуются в HTTPS на стороне браузера — без обращения к серверу

Это называется «внутренний редирект 307» — браузер делает его самостоятельно, без сетевого запроса.

Синтаксис заголовка HSTS

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Разберём каждую директиву:

ДирективаОписаниеРекомендация
max-ageВремя действия в секундах31536000 (1 год) для production
includeSubDomainsРаспространить на все поддоменыВключать, если все поддомены поддерживают HTTPS
preloadЗапрос на включение в preload-список браузеровВключать после тестирования

Настройка HSTS на популярных серверах

Nginx

server {
    listen 443 ssl;
    server_name example.com;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}

Важно: добавляйте заголовок только для HTTPS-блока (443), не для HTTP (80).

Apache

<VirtualHost *:443>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</VirtualHost>

PHP (программно)

header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');

Preload-список HSTS

Preload-список — это список доменов, встроенный в браузеры Chrome, Firefox, Safari и Edge. Для доменов из этого списка HTTPS используется с самого первого посещения — даже если пользователь никогда не был на сайте.

Требования для включения в preload-список:

  • Валидный SSL-сертификат
  • Редирект с HTTP на HTTPS на основном домене
  • HSTS-заголовок с max-age не менее 31536000 (1 год)
  • Директива includeSubDomains
  • Директива preload
  • Все поддомены должны поддерживать HTTPS

Подать заявку можно на hstspreload.org.

Типичные ошибки при настройке HSTS

  • Слишком малый max-age — значения меньше 1 года не принимаются в preload-список. Начните с 300 секунд для тестирования, затем увеличьте
  • HSTS на HTTP — заголовок на HTTP-ответе игнорируется браузерами (и это правильно — иначе злоумышленник мог бы его подделать)
  • includeSubDomains без проверки — если хотя бы один поддомен не поддерживает HTTPS, пользователи потеряют к нему доступ
  • Забыли про API документацию и ресурсы — если API или CDN используют HTTP, HSTS может сломать интеграции
  • Невозможность отката — после включения preload удалить домен из списка сложно и долго (несколько месяцев)

Рекомендуемый план внедрения

  1. Убедитесь, что весь сайт работает по HTTPS, включая все ресурсы
  2. Настройте редирект HTTP → HTTPS
  3. Добавьте HSTS с max-age=300 (5 минут) для тестирования
  4. Проверьте заголовок с помощью инструмента проверки HTTP-заголовков enterno.io
  5. Увеличьте max-age до 604800 (1 неделя), затем до 2592000 (1 месяц)
  6. Добавьте includeSubDomains, убедившись, что все поддомены готовы
  7. Добавьте preload и подайте заявку на hstspreload.org
  8. Установите финальное значение max-age=31536000 (1 год)

Как проверить HSTS на сайте

Самый быстрый способ — использовать проверку HTTP-заголовков на enterno.io. Введите URL вашего сайта и найдите в ответе заголовок Strict-Transport-Security. Инструмент покажет значение max-age, наличие директив includeSubDomains и preload.

Также можно проверить в Chrome DevTools: откройте вкладку Network, выберите основной документ и посмотрите Response Headers.

Итоги

HSTS — это простой, но мощный инструмент защиты. Он не требует сложной настройки, но значительно повышает безопасность за счёт принудительного использования HTTPS. Если ваш сайт уже работает по HTTPS, нет причин не включить HSTS — это бесплатная и эффективная мера защиты от целого класса атак.

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

Проверить безопасность сайта →
Другие статьи: Безопасность
Безопасность
Безопасность API: лучшие практики защиты
11.03.2026 · 152 просм.
Безопасность
Content Security Policy (CSP) — полное руководство по настройке
12.03.2026 · 136 просм.
Безопасность
Состояние security-заголовков топ-сайтов рунета: исследование 50 сайтов (2026)
25.06.2026 · 63 просм.
Безопасность
BIMI: логотип бренда в письмах, как настроить
23.06.2026 · 33 просм.