Какие атаки решает HSTS

Представьте, что пользователь входит на сайт через Wi-Fi в общественном месте. Если соединение не защищено, злоумышленник может перехватить всё — пароли, данные, личную информацию. Это атака посредника (man-in-the-middle). Для атаки достаточно находиться в той же сети.

Есть способ сложнее — SSL stripping. Злоумышленник встраивается между браузером и сервером сайта. Пользователь вводит адрес с HTTPS, но атакующий преобразует его в обычный HTTP. Браузер не видит проблемы, данные идут открыто. Такие атаки были невидимы длительное время.

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

HSTS защищает последующие посещения; для защиты первого требуется preload или переход по HTTPS. Сайт один раз сообщает браузеру через специальный заголовок: я работаю только с защищённым соединением. Браузер это запоминает. При следующих посещениях браузер автоматически перенаправляет любой HTTP-запрос на HTTPS. Атакующий уже ничего не может сделать.

Как механизм HSTS работает на практике

Когда пользователь заходит на защищённый сайт впервые, сервер отправляет ответ вместе с заголовком Strict-Transport-Security. Этот заголовок содержит директиву безопасности: запомни, что домен работает только через защищённое соединение согласно протоколу.

Браузер прочитал и запомнил информацию. Вся работа происходит локально на странице пользователя. Со следующего визита, если пользователь введёт HTTP адрес или кликнет на ссылку с HTTP, браузер сам перенаправляет запрос на HTTPS. Это происходит до того, как запрос покинет компьютер. Посредник не может ничего сделать.

Технология Strict-Transport-Security работает прозрачно. Пользователь может не заметить редирект. Браузер просто делает свою работу, используя директиву безопасности.

Параметры HSTS: max-age, includesubdomains, preload

Заголовок Strict-Transport-Security содержит несколько параметров, каждый отвечает за разное.

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

includesubdomains расширяет защиту на все поддомены сайта. Если у вас есть api.example.com, blog.example.com — они получают прикрытие HSTS. Когда браузер получает политику с includesubdomains, он запоминает, что весь домен и его поддомены работают только с защищённым соединением.

Директива preload в заголовке HSTS сама по себе не добавляет домен в список предварительной загрузки браузеров. Для включения требуется выполнить условия сервиса HSTS Preload, отдельно отправить домен через hstspreload.org и дождаться обновления браузерных списков; это может занять месяцы.

Перед подачей заявки убедитесь, что HTTPS работает с действительным сертификатом на основном домене и всех поддоменах, HTTP перенаправляет на HTTPS, а заголовок HSTS содержит требуемые max-age, includeSubDomains и preload. Актуальные критерии и последствия включения проверьте на hstspreload.org.

Технически: что происходит в браузере

При первом посещении браузер получает заголовок strict-transport-security max-age=31536000; includesubdomains; preload. Браузер парсит строку и сохраняет информацию. На 31 536 000 секунд браузер будет помнить, что домен требует защиту.

При следующем визите пользователь вводит адрес. Браузер проверяет кэш политик HSTS. Когда найдено — браузер знает, что нужен HTTPS, и автоматически перенаправляет на защищённое соединение. Никакой запрос не покидает компьютер в открытом виде.

То же происходит с поддоменами. Если включен includesubdomains, браузер защищает все дополнительные версии доменов без настройки.

Поддержка современными браузерами и требования compliance

Все современные браузеры поддерживают HSTS. Chrome, Firefox, Safari, Edge, Opera — все используют эту технологию. Старые версии браузеров не поддерживали её, но это неактуально сейчас.

Для соответствия стандартам конфиденциальности HSTS стало требованием. Организации, обрабатывающие финансовые данные или конфиденциальность, не могут обойтись без него. Проверка включения Strict-Transport-Security заголовка обязательна при аудите.

Для владельцев сайтов добавление занимает несколько минут. Добавить две строки в конфигурацию Nginx или Apache — и всё готово. Перед включением HSTS проверьте доступность сайта и поддоменов по HTTPS. Это просто заголовок, который браузер читает и запоминает. Механизм HSTS значительно повышает безопасность работы сайта для всех пользователей.