CertH certH
На этой странице

HSTS: max-age, preload и что именно ломается

Обновлено 2026-11-03 · 6 мин чтения

HSTS — единственный заголовок безопасности, способный сделать сайт недоступным, в том числе для владельца. И он же обязателен для A+. Расстояние между этими двумя фактами целиком зависит от дисциплины при развёртывании.

Что заголовок делает на самом деле

Strict-Transport-Security сообщает браузеру, что к этому хосту следующие N секунд можно обращаться только по HTTPS. Получив его, браузер переписывает внутренние ссылки http://, блокирует клик «всё равно продолжить» при ошибке сертификата и полностью отказывается от чистого HTTP — ещё до того, как запрос покинет машину.

Именно поэтому он защищает от атак понижения, от которых не спасает редирект: редирект всё равно отправляет первый запрос открытым текстом, и это ровно тот запрос, который злоумышленник в сети и хочет перехватить.

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

max-age — обратный отсчёт, который нельзя отменить

max-age хранится на клиенте. Если вы отдали год, а затем убрали заголовок, каждый браузер, который его уже видел, продолжит требовать HTTPS до года. Серверного выключателя нет.

CertH считает 180 дней (15552000 секунд) порогом для A+. Год — обычное рабочее значение. Меньше 180 дней всё ещё считается включённым HSTS в сводке, но A+ не открывает.

includeSubDomains и preload — два независимых решения

includeSubDomains распространяет правило на все поддомены. Если хотя бы один поддомен говорит только по HTTP — внутренний инструмент, устаревшая админка, staging-хост — он станет недоступен для всех, кто заходил на родительский домен. Сначала проведите аудит DNS.

preload идёт дальше: домен вшивается в список, поставляемый с браузерами, поэтому правило действует уже при первом визите, до получения любого заголовка. Удаление занимает месяцы и требует заявки в список удаления. Не добавляйте preload, пока заголовок не проработает стабильно хотя бы несколько месяцев.

  • •Отдавайте заголовок в каждом ответе по HTTPS, включая страницы ошибок — 404 без него ничему не учит браузер.
  • •Никогда не отправляйте HSTS по чистому HTTP; по спецификации браузеры его игнорируют, поэтому неверно настроенный цикл редиректов так не починить.
  • •Проверьте поддомены на сервисы только по HTTP, прежде чем добавлять includeSubDomains.
  • •Добавляйте preload последним и только когда max-age уже какое-то время равен году.

Развёртывание, которое ничего не ломает

Начните с короткого max-age, чтобы ошибка быстро истекала: max-age=300. Подержите неделю, следя за сломанными поддоменами и отчётами о смешанном содержимом. Затем день, потом месяц, потом год. Каждый шаг обратим в пределах предыдущего окна — в этом и смысл начинать с короткого.

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

FAQ

Снижает ли отсутствие HSTS мой балл?

Оно не снимает баллы с базы, но блокирует A+: высшая оценка требует HSTS с max-age не менее 180 дней или preload. Сайт может набрать 100 и всё равно остаться A без него.

Можно ли использовать HSTS, не владея всеми поддоменами?

Да, если не указывать includeSubDomains. Тогда заголовок применяется только к тому хосту, который его отдал.

Читать далее