Spec-Zone.ru › HTTP

Заголовки: Strict-Transport-Security

Заголовок Strict-Transport-Security

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

  • Подробнее
  • Полная информация о совместимости
>

HTTP-заголовок Strict-Transport-Security ответа (часто сокращённо называемый HSTS) сообщает браузерам, что к хосту следует обращаться только по HTTPS, а все последующие попытки доступа по HTTP должны автоматически переключаться на HTTPS. Кроме того, при последующих подключениях к хосту браузер не позволит пользователю обойти ошибки защищённого соединения, например ошибку недействительного сертификата. HSTS идентифицирует хост только по его доменному имени.

Тип заголовка Заголовок ответа

Синтаксис

Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains; preload

Директивы

max-age=<expire-time>

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

includeSubDomains Необязательно

Если указана эта директива, политика HSTS также применяется ко всем поддоменам домена хоста.

preload Необязательно

Подробнее см. в разделе Предварительная загрузка Strict Transport Security. При использовании preload директива max-age должна иметь значение не меньше 31536000 (1 год), а директива includeSubDomains должна присутствовать.

Описание

Заголовок Strict-Transport-Security сообщает браузеру, что все подключения к хосту должны использовать HTTPS. Хотя это заголовок ответа, он не влияет на обработку текущего ответа браузером, а определяет способ отправки будущих запросов.

Когда ответ HTTPS содержит заголовок Strict-Transport-Security, браузер добавляет доменное имя хоста в постоянный список хостов HSTS. Если доменное имя уже есть в списке, обновляются время истечения срока действия и директива includeSubDomains. Хост идентифицируется только по доменному имени. IP-адрес не может быть хостом HSTS. HSTS применяется ко всем портам хоста независимо от того, какой порт использовался в запросе.

Перед загрузкой URL http браузер проверяет доменное имя по списку хостов HSTS. Если доменное имя совпадает с именем хоста HSTS без учёта регистра или является поддоменом хоста, для которого указана директива includeSubDomains, браузер заменяет схему URL на https. Если в URL указан порт 80, браузер меняет его на 443. Любой другой явно указанный номер порта остаётся без изменений, и браузер подключается к этому порту по HTTPS.

Если при подключении к хосту HSTS возникает предупреждение или ошибка TLS, например ошибка недействительного сертификата, браузер не предлагает пользователю продолжить подключение или «игнорировать» сообщение об ошибке, поскольку это противоречило бы принципу строгой безопасности.

Примечание: Хост должен отправлять заголовок Strict-Transport-Security только по HTTPS, а не по небезопасному HTTP. Браузеры игнорируют заголовок, если он отправлен по HTTP, чтобы злоумышленник типа «человек посередине» (MITM) не мог изменить его, чтобы преждевременно завершить срок действия, или добавить его для хоста, не поддерживающего HTTPS.

Срок действия

Каждый раз, когда браузер получает заголовок Strict-Transport-Security, он обновляет время истечения срока действия HSTS для хоста, прибавляя max-age к текущему времени. Фиксированное значение max-age может предотвратить истечение срока действия HSTS, поскольку каждый последующий ответ будет отодвигать этот срок всё дальше в будущее.

Если в ответе от хоста, который ранее отправлял заголовок Strict-Transport-Security, этот заголовок отсутствует, предыдущий заголовок продолжает действовать до истечения срока его действия.

Чтобы отключить HSTS, задайте max-age=0. Это вступит в силу только после того, как браузер отправит защищённый запрос и получит заголовок ответа. По замыслу, отключить HSTS через небезопасный HTTP нельзя.

Поддомены

Директива includeSubDomains указывает браузеру применять политику HSTS домена также к его поддоменам. Политика HSTS для secure.example.com с директивой includeSubDomains также применяется к login.secure.example.com и admin.login.secure.example.com. Но она не применяется к example.com или insecure.example.com.

Каждый поддомен должен включать заголовки Strict-Transport-Security в свои ответы, даже если для родительского домена используется includeSubDomains, поскольку браузер может обратиться к поддомену раньше, чем к родительскому домену. Например, если example.com включает заголовок HSTS с директивой includeSubDomains, но все существующие ссылки ведут напрямую на www.example.com, браузер никогда не увидит заголовок HSTS для example.com. Поэтому www.example.com также должен отправлять заголовки HSTS.

Браузер хранит политику HSTS для каждого домена и поддомена отдельно, независимо от директивы includeSubDomains. Если и example.com, и login.example.com отправляют заголовки HSTS, браузер хранит две отдельные политики HSTS, срок действия которых может истечь независимо друг от друга. Если для example.com используется includeSubDomains, то login.example.com остаётся защищённым, даже если срок действия одной из политик истечёт.

Если max-age=0, директива includeSubDomains не действует, поскольку домен, указавший includeSubDomains, немедленно удаляется из списка хостов HSTS; при этом отдельные политики HSTS для каждого поддомена не удаляются.

Небезопасные HTTP-запросы

Если хост принимает небезопасные HTTP-запросы, он должен отвечать постоянным перенаправлением (например, с кодом состояния 301), в котором URL https указан в заголовке Location. Перенаправление не должно содержать заголовок Strict-Transport-Security, поскольку запрос был отправлен по небезопасному HTTP, а заголовок можно отправлять только по HTTPS. После того как браузер выполнит перенаправление и отправит новый запрос по HTTPS, ответ должен содержать заголовок Strict-Transport-Security, чтобы гарантировать, что все будущие попытки загрузить URL http будут сразу выполняться по HTTPS без перенаправления.

Один из недостатков HSTS состоит в том, что политика вступает в силу только после того, как браузер установит хотя бы одно защищённое соединение с хостом и получит заголовок Strict-Transport-Security. Если браузер загружает URL http до того, как узнаёт, что хост относится к HSTS, первоначальный запрос уязвим для сетевых атак. Эта проблема решается с помощью предварительной загрузки.

Пример сценария Strict Transport Security

  1. Дома пользователь впервые посещает http://example.com/.

  2. Поскольку схема URL — http, а браузер не содержит этот хост в списке хостов HSTS, соединение устанавливается по небезопасному HTTP.

  3. Сервер отвечает перенаправлением 301 Moved Permanently на https://example.com/.

  4. Браузер отправляет новый запрос, на этот раз по HTTPS.

  5. Ответ, полученный по HTTPS, содержит заголовок:

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

    Браузер запоминает example.com как хост HSTS, а также то, что для него указана директива includeSubDomains.

  6. Несколько недель спустя пользователь находится в аэропорту и решает воспользоваться бесплатным Wi-Fi. Не зная об этом, он подключается к поддельной точке доступа, работающей на ноутбуке злоумышленника.

  7. Пользователь открывает http://login.example.com/. Поскольку браузер помнит example.com как хост HSTS и использовалась директива includeSubDomains, браузер подключается по HTTPS.

  8. Злоумышленник перехватывает запрос с помощью поддельного HTTPS-сервера, но у него нет действительного сертификата для этого домена.

  9. Браузер отображает ошибку недействительного сертификата и не позволяет пользователю обойти её, не давая ему передать свой пароль злоумышленнику.

Предварительная загрузка Strict Transport Security

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

  • Информация о списке предварительной загрузки HSTS в Chrome: https://www.chromium.org/hsts/
  • Список предварительной загрузки HSTS в Firefox: nsSTSPreloadList.inc

Примеры

>

Использование Strict-Transport-Security

Все существующие и будущие поддомены будут использовать HTTPS в течение max-age, равного 1 году. Это блокирует доступ к страницам или поддоменам, которые могут обслуживаться только по HTTP.

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

Значение max-age, равное 1 году, — минимальное значение, принимаемое для предварительной загрузки HSTS. В следующем примере используется значение 2 года, которое указано в примере заголовка на сайте https://hstspreload.org.

В следующем примере для max-age задано значение 2 года, а в конце добавлено preload. Это необходимо для включения в списки предварительной загрузки HSTS всех основных браузеров, таких как Chromium, Edge и Firefox.

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

Спецификации

Спецификация
HTTP Strict Transport Security (HSTS)>
# section-6.1>

Совместимость с браузерами

Настольные Мобильные
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari для iOS Samsung Internet WebView для Android WebView для iOS
Strict-Transport-Security 4 12 4 12 7 18 4 12 7 1.0 4.4 7

См. также

  • Функции, доступные только в защищённых контекстах
  • HTTP Strict Transport Security уже здесь! в блоге blog.sidstamm.com (2010)
  • HTTP Strict Transport Security (принудительное использование HTTPS) на hacks.mozilla.org (2010)
  • HTTP Strict Transport Security — памятка на owasp.org
  • HTTP Strict Transport Security в Википедии
  • Сервис предварительной загрузки HSTS

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API