BBC внедряет HSTS на своем веб-сайте для повышения безопасности и производительности. Узнайте, что это значит и как HSTS может вам помочь.
В последние годы внедрение HTTPS неуклонно растет. Согласно веб-альманаху HTTP Archive за 2021 год, около 91% всех запросов как для настольных, так и для мобильных устройств обрабатывались через HTTPS . HTTPS не просто существует, он является необходимой предпосылкой для использования таких функций, как Service Worker , и современных протоколов, таких как HTTP/2 и HTTP/3 .
Недавно Нил Крейг — ведущий технический архитектор BBC — написал в Твиттере, что HTTP Strict Transport Security (HSTS) постепенно внедряется на bbc.com . Узнайте, что это значит для BBC и что это может значить для вас.
Проблема
Веб-серверы часто прослушивают запросы как на портах 80, так и на 443. Порт 80 предназначен для небезопасных HTTP-запросов, а порт 443 — для безопасных HTTPS. Это может создать проблему, поскольку когда вы вводите адрес в адресную строку без префикса протокола https://
— как это обычно делает большинство пользователей — некоторые браузеры будут перенаправлять трафик на небезопасную HTTP-версию сайта по устаревшим причинам ( хотя это не всегда так ).
Распространенный способ гарантировать, что пользователи не получат доступ к незащищенной версии веб-сайта, — это перенаправление HTTP-to-HTTPS для всех запросов. Это, конечно, работает, но запускает следующую цепочку событий:
- Сервер получает HTTP-запрос.
- Сервер выполняет перенаправление для перехода к HTTPS-эквиваленту запрошенного ресурса.
- Сервер должен согласовать безопасное соединение с браузером.
- Содержимое загружается как обычно.
Хотя перенаправления работают нормально, их можно неправильно настроить таким образом, чтобы доступ к небезопасной версии сайта все равно оставался возможным. Даже если все настроено правильно, все равно существует проблема безопасности, заключающаяся в том, что пользователь все равно будет подключаться через небезопасный HTTP на этапе перенаправления, что подвергает пользователей возможности опасных атак «человек посередине» .
Введите HSTS
HSTS определяется заголовком ответа HTTP Strict-Transport-Security
для запросов HTTPS. Если этот параметр установлен, обратные посещения веб-сайта будут вызывать специальное перенаправление, известное как «Внутреннее перенаправление 307», при котором логику перенаправления обрабатывает браузер, а не сервер. Это предотвращает перехват запроса, поскольку он никогда не покидает браузер, поэтому он более безопасен. В качестве дополнительного бонуса эти типы перенаправления чрезвычайно быстры, поэтому любая заметная задержка во время перехода с HTTP на HTTPS исключается.
![Внутреннее перенаправление 307 с HTTP на HTTPS, запускаемое заголовком HSTS. Перенаправление 307 занимает всего 2 миллисекунды.](https://web.dev/static/blog/bbc-hsts/image/a-307-internal-redirect-cd7d384b0a833.png?authuser=1&hl=ru)
Синтаксис аналогичен директиве max-age
Cache-Control
, заголовок HSTS определяет директиву max-age
. Эта директива принимает значение в секундах, которое определяет, как долго политика действительна:
Strict-Transport-Security: max-age=3600
В предыдущем примере политика должна вступить в силу только в течение часа.
Развертывание HSTS
Основной недостаток развертывания HSTS заключается в том, что вы не готовы рассматривать свой источник как строго безопасный. Предположим, у вас есть несколько поддоменов, с которых вы обслуживаете ресурсы, но, возможно, не все из них безопасны. В этом случае заголовок HSTS может привести к поломке вашего сайта.
BBC выбрала правильный подход к развертыванию HSTS. Как упомянул в своем твите Нил Крейг , первоначальное значение, установленное для bbc.com, было max-age=10
.
Такой подход означает, что изначально политика действовала только в течение десяти секунд. Это не дает особой пользы, но идея состоит в том, чтобы выяснить, могут ли вообще возникнуть проблемы с применением HSTS. Со временем вы можете постепенно увеличивать политику и проверять, возникают ли проблемы. На момент написания этой статьи bbc.com указал политику HSTS max-age=86400
, и со временем она почти наверняка увеличится.
Вы, конечно, не хотите выходить из ворот с длинным значением max-age
при развертывании HSTS. Вы можете внезапно обнаружить, что начинаете пытаться исправить проблемы, в то время как пользователи сталкиваются с проблемами. Начните с малого и постепенно увеличивайте! Если вы уверены, что все в порядке, вы можете установить директиву max-age
на гораздо более длительный период времени. После полного развертывания рекомендуется установить max-age
на один или два года .
Получите более безопасную и быструю начальную навигацию с помощью списка предварительной загрузки HSTS.
Политика HSTS вступает в силу только после первого посещения веб-сайта, поэтому преимущества при первом посещении сайта не предоставляются. Это все равно потребует небезопасного перенаправления. Однако вы можете предварительно загрузить политику HSTS, добавив свой веб-сайт в список предварительной загрузки HSTS , который представляет собой жестко закодированный список веб-сайтов, которые, как известно браузеру, являются строго HTTPS. Если ваш сайт находится в списке предварительной загрузки, первое посещение также защищено, а перенаправление HTTP-to-HTTPS будет мгновенным.
Попробуйте сами
Если BBC чувствует себя комфортно в тестировании HSTS, есть большая вероятность, что вы сможете сделать то же самое для своего веб-сайта. Попробуйте его для своего веб-сайта и — если вы хотите ускорить его работу — добавьте его в список предварительной загрузки HSTS, когда вы уверены, что в нем нет ошибок, чтобы обеспечить вашим пользователям более безопасную и быструю работу.