HSTS (строгая транспортная безопасность HTTP)

Электронная почта и безопасность
Политика безопасности, заставляющая браузеры обращаться к сайту только по HTTPS.
← Вернуться к глоссарию

Что такое HSTS?

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

Почему HSTS важен

Даже при действующем сертификате SSL остаются уязвимости:

Атака SSL stripping

1. Пользователь вводит «example.com» без https://

2. Атакующий перехватывает первоначальный HTTP-запрос

3. Атакующий обращается к сайту по HTTPS, а пользователю показывает HTTP

4. Пользователь считает соединение защищённым, но атакующий видит весь обмен

HSTS предотвращает это, поскольку браузер не делает первоначальный HTTP-запрос.

Преимущества HSTS

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

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

Директивы

ДирективаОписание
max-ageЧисло секунд, в течение которых нужно помнить HSTS (31536000 = 1 год)
includeSubDomainsПрименять HSTS ко всем поддоменам
preloadСогласие на включение в список предварительной загрузки браузеров

Реализация HSTS

Nginx

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

Apache

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Cloudflare

В панели управления Cloudflare откройте раздел сертификатов на границе сети (SSL/TLS → Edge Certificates → HTTP Strict Transport Security) и включите HSTS.

Express.js

const helmet = require('helmet');

app.use(helmet.hsts({

maxAge: 31536000,

includeSubDomains: true,

preload: true

}));

Список предварительной загрузки HSTS

Список предварительной загрузки HSTS — это перечень доменов, зафиксированный в браузерах: к ним следует обращаться только по HTTPS. Он устраняет уязвимость даже самого первого HTTP-запроса.

Требования предварительной загрузки

1. Действующий сертификат SSL

2. Перенаправление всего HTTP на HTTPS

3. Заголовок HSTS со следующими параметрами:

- max-age не менее 31536000 (1 год)

- директива includeSubDomains

- директива preload

4. Все поддомены должны поддерживать HTTPS

Отправка в список предварительной загрузки

1. Проверьте требования: используйте hstspreload.org

2. Отправьте домен: укажите его на hstspreload.org

3. Дождитесь включения: обновление браузеров занимает от нескольких недель до нескольких месяцев

Предупреждения о предварительной загрузке

Предварительная загрузка практически постоянна. Удаление домена из списка занимает месяцы и требует обновления браузеров. Добавляйте домен только если уверены, что все поддомены будут поддерживать HTTPS бессрочно.

Проверка HSTS

Инструменты разработчика браузера:

1. Откройте вкладку Network в DevTools

2. Загрузите сайт

3. Проверьте в заголовках ответа Strict-Transport-Security

С помощью curl:
curl -I https://example.com | grep -i strict
С помощью DomScan:
curl "https://domscan.net/v1/health?domain=example.com"

# Reports hasHSTS in security details

Статус предварительной загрузки:

Проверьте на hstspreload.org, добавлен ли домен в список предварительной загрузки.

Стратегия внедрения HSTS

Фаза 1: короткий max-age

Начните с короткого max-age и проверьте конфигурацию:

Strict-Transport-Security: max-age=300

Если что-то сломается, кэш у пользователей будет действовать всего 5 минут.

Фаза 2: увеличение срока

После подтверждения, что HTTPS работает везде:

Strict-Transport-Security: max-age=86400

Фаза 3: добавление поддоменов

Когда все поддомены поддерживают HTTPS:

Strict-Transport-Security: max-age=2592000; includeSubDomains

Фаза 4: полное внедрение и предварительная загрузка

После нескольких месяцев стабильной работы:

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

Затем отправьте домен в список предварительной загрузки.

Распространённые проблемы HSTS

Поддомен без HTTPS: includeSubDomains нарушит работу такого поддомена Среды разработки: закэшированный от production HSTS может нарушить локальную разработку Заголовки CDN/прокси: убедитесь, что посредники не удаляют заголовок HSTS Смешанное содержимое: все ресурсы должны использовать HTTPS; HSTS не исправляет встроенные HTTP-ресурсы

HSTS необходим для сайтов, работающих с конфиденциальными данными, и настоятельно рекомендуется для всех сайтов с HTTPS.

Применяйте эти знания на практике

Используйте API DomScan для проверки доступности доменов, их состояния и многого другого.