hostprofi.ru
Подобрать хостинг
Термин·буква H

HSTS

краткое определение

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

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

Как работает

Сервер добавляет заголовок в HTTP-ответ:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  • max-age — время в секундах, на которое браузер запомнит политику. 31536000 = 1 год.
  • includeSubDomains — распространить политику на все субдомены.
  • preload — разрешить внести домен в HSTS Preload List (встроен в браузеры).

Первый запрос к домену всё равно уязвим (браузер ещё не знает о HSTS). Preload List решает эту проблему: домены из списка принудительно используют HTTPS ещё до первого соединения.

HSTS Preload List

Google ведёт hstspreload.org — список доменов, встроенный в Chrome, Firefox, Safari, Edge. Для добавления домена в список требуются: max-age >= 31536000, includeSubDomains, preload, все субдомены работают по HTTPS. Удаление из preload-списка занимает месяцы.

История

Первое предложение HSTS появилось в 2009 году. RFC 6797 опубликован в ноябре 2012 года. Chrome поддержал HSTS с версии 4.0 (2010). HSTS Preload List запущен в 2012 году; к 2024 году в нём более 140 000 доменов. В 2020 году браузеры начали автоматически применять HSTS к .dev и .app доменам.

Связь с хостингом

В Nginx HSTS добавляется в конфигурацию HTTPS-блока:

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

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

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

HSTS (HTTP Strict Transport Security) — заголовок HTTP-ответа, указывающий браузеру всегда использовать HTTPS для данного домена. Браузер сохраняет директиву в локальный список и в течение max-age секунд (рекомендуется 31536000 = 1 год) отказывается от HTTP-соединений к этому домену без попытки редиректа. Настройка в Nginx: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload". Директива includeSubDomains распространяет HSTS на все поддомены. preload включает домен в Chromium HSTS Preload List (hardcoded в браузере). HTTPS и HSTS -- взаимодополняющие механизмы защиты.

HSTS Preload List

Preload List -- список доменов, встроенный прямо в Chrome, Firefox, Safari, Edge. Браузер никогда не обратится к этим доменам по HTTP, даже при первом посещении. Для попадания в список: сайт должен иметь действующий SSL, HSTS header с max-age не менее 1 года, includeSubDomains, preload. Подача заявки: hstspreload.org. Удаление из списка занимает месяцы (браузеры обновляются постепенно). Перевод сайта на HTTPS должен предшествовать включению HSTS.

Типичные ошибки с HSTS

Первая ошибка -- включить HSTS до настройки HTTPS на всех поддоменах: браузер не откроет поддомен без SSL. Вторая -- установить max-age на несколько лет при нестабильном SSL: если сертификат не обновится, сайт будет недоступен весь max-age период. Начинайте с max-age=300 (5 минут), увеличивайте постепенно. Третья -- добавить preload без понимания последствий: убрать домен из preload list нельзя быстро. Mixed content нарушает HSTS: HTTP-ресурсы на HTTPS-странице блокируются браузером.

Другие термины