Протоколы открытого текста, такие как HTTP, могут быть уязвимы для атак перехвата, когда злоумышленник может прочитать передаваемый контент. К счастью, Transport Layer Security (TLS) может зашифровать трафик и существенно затруднить злоумышленникам использование этих данных в случае их захвата.
Однако злоумышленники могут обойти TLS, заставив зашифрованные соединения использовать HTTP с открытым текстом. Для решения этой проблемы был введен заголовок ответа HTTP Strict Transport Security (HSTS) , который заставляет браузер пользователя посещать веб-сайт только с использованием TLS и не возвращаться к открытому тексту HTTP (в течение заданного времени).
Как проваливается аудит Lighthouse
В ходе аудита будут отмечены следующие проблемы с заголовком HSTS:
- Если заголовок HSTS вообще не найден.
- Если одна из рекомендуемых директив отсутствует (
max-age
,includedSubDomains
,preload
) - Если срок действия директивы
max-age
составляет менее одного года (31536000 секунд). - Если при анализе заголовка возникла синтаксическая ошибка, например неизвестная директива.
Настройте строгую политику HSTS
Оптимальная конфигурация заголовка HSTS выглядит следующим образом:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- Директива
max-age
определяет время, в течение которого браузер пользователя вынужден посещать веб-сайт только с использованием TLS (в секундах). По истечении этого времени можно будет снова получить доступ к сайту с помощью простого HTTP, если веб-сайт не предоставляет заголовок HSTS (или имеются временные перенаправления с HTTP на HTTPS). - Установка директивы
includeSubDomains
приведет к принудительному использованию заголовка на всех поддоменах URL-адреса страницы, изначально отправляющего заголовок. Например, наличие заголовка HSTS, отправленного с google.com, который включает директивуincludeSubDomains
также приведет к принудительному использованию заголовка HSTS на mail.google.com. - Установка директивы
preload
и отправка домена в службу предварительной загрузки HSTS приведет к компиляции домена в двоичные файлы браузера, которые используют предварительно загруженный список HSTS (а не только Google Chrome).
При развертывании заголовка HSTS существуют некоторые риски. Любые функции, требующие незашифрованного HTTP-соединения, будут фактически отключены на время, установленное в директиве max-age
. Потенциально даже дольше, если применяется директива preload
.
Для снижения рисков, связанных с внедрением, рекомендуется поэтапный подход:
Начнем с небольшого
max-age
и добавим толькоincludeSubDomains
(безpreload
):max-age=3600; includeSubDomains
После некоторого периода восстановления (например, одной недели) и отсутствия сообщений о проблемах увеличьте
max-age
, например:max-age=604800; includeSubDomains
Если этот начальный этап успешен в течение длительного периода времени (например, трех месяцев), веб-сайт и его поддомены должны быть добавлены в список предварительной загрузки HSTS, а также должна быть добавлена директива
preload
.max-age=63072000; includeSubDomains; preload