Defaults.Exposed › Исправления › HSTS (Strict-Transport-Security)
Как исправить HSTS (Strict-Transport-Security)
HSTS — это однострочная инструкция, которую ваш сайт даёт каждому браузеру: «всегда возвращайся ко мне по защищённому, зашифрованному соединению — никогда по незащищённому». Без неё ваш замок можно тихо сорвать в общей WiFi-сети, а самый первый визит на ваш сайт оказывается под угрозой.
Главное для вашего бизнеса: Иметь HTTPS (замок) — не то же самое, что принуждать его. Без HSTS злоумышленник в той же WiFi, что и ваш клиент, может тихо понизить соединение до обычного, незашифрованного HTTP — перехватывая логины, данные карт и формы, пока клиент не видит ничего подозрительного. Ваш SSL-сертификат, за который вы, возможно, платите, обходится. Исправление бесплатно и занимает около 15 минут у того, кто ведёт ваш сайт.
Во что это может вам обойтись
- У клиентов в WiFi кафе, отеля, аэропорта или конференции соединение с вашим сайтом могут тихо понизить и прочитать их данные — без всякого предупреждения на экране.
- Вы заплатили за HTTPS и у вас есть замок, но без HSTS злоумышленники могут просто обойти его; сертификат даёт ложное чувство безопасности.
- Самый первый визит на ваш сайт (до любого перенаправления на HTTPS) — слабое место, которое атакуют, — HSTS и есть то, что закрывает его для каждого повторного визита.
- Анкета безопасности, форма киберстрахования или чек-лист корпоративного покупателя помечает «нет HSTS» и стопорит сделку, пока это не исправлено.
- Задайте значение неверно (слишком коротким) — и получите худшее из двух миров: выглядит настроенным, а защиты почти никакой.
Почему это важно. HTTPS защищает соединение, когда оно уже зашифровано, — но не принуждает браузеры его использовать. Злоумышленники эксплуатируют этот пробел «срывом SSL»: в любой общей сети они тихо удерживают посетителя на незащищённом HTTP, читая всё. HSTS велит браузеру вовсе отказываться от обычного HTTP для вашего домена надолго, так что пробел закрывается после первого визита. Это один заголовок ответа, бесплатный для добавления, и в нашей оценке он весит реальные баллы, потому что отсутствующее или слишком короткое значение оставляет каждого посетителя в публичной WiFi под угрозой.
Что это простыми словами
У вас почти наверняка есть HTTPS — маленький замок в строке браузера. Хорошо. Но вот часть, о которой почти никому не говорят: иметь HTTPS — не то же самое, что принуждать его.
HTTPS делает соединение зашифрованным как только браузер решит его использовать. HSTS — сокращение от HTTP Strict Transport Security — это инструкция, заставляющая браузер всегда его использовать. Это одна невидимая строка, которую ваш сайт отправляет каждому посетителю, гласящая, по сути:
«Отныне для моего домена общайся со мной только по защищённому соединению. Никогда по незащищённому. Даже не пробуй.»
Браузер запоминает это и подчиняется столько, сколько вы велите, — обычно год. После первого защищённого визита посетителя его браузер будет просто отказываться загружать ваш сайт по обычному, незашифрованному HTTP, даже если что-то попытается это принудить.
Без HSTS правила «всегда используй защищённую версию» не существует — и злоумышленники точно знают, как эксплуатировать этот пробел.
Чем это может вам обойтись
Это реалистичные, повседневные сценарии. Мы никогда не называем настоящий бизнес; это иллюстрации того, как пробел используют.
- Оформление покупки в кофейне. Клиент открывает ваш магазин в WiFi кафе и идёт оформлять покупку. Злоумышленник в той же сети запускает бесплатный, общеизвестный инструмент, удерживающий клиента на обычном HTTP вместо HTTPS. Клиент видит то, что выглядит как ваш обычный сайт — без предупреждения, без сломанного замка в месте, куда он бы глянул, — и вводит данные карты. Злоумышленник читает каждое нажатие. Ваш SSL-сертификат не сделал ничего, потому что соединению вообще не дали стать защищённым.
- Сотрудник в командировке. Сотрудник входит в вашу админ-панель или веб-почту из отеля или аэропорта. Тот же приём понижения перехватывает его логин и пароль. Теперь у злоумышленника есть путь в ваш бизнес — не потому, что ваша парольная политика была слабой, а потому, что страница входа была достижима по незащищённому HTTP.
- Сделка, которая буксует. Более крупный клиент перед подписанием присылает вам свою стандартную анкету безопасности. Одна строка спрашивает: «Принуждает ли ваш сайт HTTPS через HSTS?» Вашему ИТ-контакту приходится ответить «нет», и процесс закупок встаёт на паузу, пока вы судорожно чините бесплатную 15-минутную настройку, которая теперь выглядит красным флагом перед покупателем.
- Проверка киберстрахования или соответствия. Сканирование страховщика или аудитор, проверяющий вашу политику защиты данных, помечает отсутствующий заголовок. Шифрование персональных данных — явное ожидание по правилам защиты данных (статья 32 GDPR), и «у нас есть сертификат, но мы его не принуждаем» — слабая позиция.
- Ложное чувство безопасности. Вы платите за SSL, замок показывается, и все считают сайт безопасным. В основном так и есть — пока клиент не оказывается в общей сети, что ровно тот момент, когда он наиболее уязвим и менее всего вероятно заметит что-то неладное.
Сквозная нить: цена не абстрактна. Это карта или логин реального клиента, перехваченные в худший возможный момент, без всякой сработавшей тревоги.
Что это на самом деле
Когда браузер запрашивает у вашего сайта страницу, ваш сервер отправляет обратно страницу плюс некоторые невидимые «заголовки» — дополнительные инструкции, которые браузер читает, а посетитель никогда не видит. HSTS — один из таких заголовков:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Важны три части:
max-age— как долго (в секундах) браузер должен помнить принуждать HTTPS.31536000— один год. Это сердце дела: слишком коротко — и пользы почти нет.includeSubDomains— распространить правило на каждый поддомен (shop.,app.,mail.и т. д.), а не только на основной адрес.preload— включить ваш домен в мастер-список, встроенный в браузеры, чтобы защита применялась даже при самом первом запросе посетителя, до того как он вообще увидел ваш сайт.
Почему «первый визит» важен
У HSTS есть одно врождённое ограничение: браузер подчиняется правилу только после того, как видел заголовок хотя бы раз. Так что самое первое соединение совсем нового посетителя всё ещё крошечное окно уязвимости. Две вещи сужают его: перенаправление HTTP-на-HTTPS (которое быстро переводит на защищённую версию) и preload (который убирает окно полностью). Поэтому полная настройка сочетает HSTS с надлежащим перенаправлением.
Как выглядит «хорошо» — и как это оценивается
Наша проверка читает ваш живой заголовок и оценивает max-age:
| Значение max-age | Что это значит | Результат |
|---|---|---|
| 1 год или больше (≥ 31536000) | Отлично — рекомендуемая настройка | Полный балл |
| 6 месяцев или больше (≥ 15768000) | Хорошо, но не полный год | Частично |
| 1 день или больше (≥ 86400) | Слабо — слишком коротко, чтобы быть надёжным | Низко / частично |
| Меньше 1 дня или вовсе нет заголовка | Фактически без защиты | Провал (высокая серьёзность) |
Так что заголовок, который существует, но установлен на несколько минут, считается провалом — выглядит настроенным, но не делает работу. Цельтесь в один год. Проверка также отмечает наличие includeSubDomains и preload.
Как это исправить (бесплатно, ~15 минут)
Передайте этот раздел тому, кто ведёт ваш сайт, — вашему ИТ-специалисту, веб-разработчику или поддержке хостинга. Исправление бесплатно. Это один заголовок или переключатель в вашей хостинг-платформе. Покупать нечего.
Сначала одно важное правило порядка: HSTS «липкий» — после включения браузеры будут отказываться от обычного HTTP для вашего домена на весь max-age. Поэтому убедитесь, что HTTPS корректно работает на основном сайте и каждом поддомене, прежде чем включать широко. Безопасный путь: протестировать с коротким значением → убедиться, что ничто не ломается → поднять до одного года.
Шаг 1 — Убедитесь, что HTTPS уже работает везде
Зайдите на сайт и ключевые поддомены по https:// и убедитесь, что они чисто загружаются с корректным сертификатом. Также убедитесь, что обычные запросы http:// перенаправляются на https://. (Если нет, сначала наладьте перенаправление HTTP-на-HTTPS — HSTS предполагает, что оно на месте.)
Шаг 2 — Добавьте заголовок (выберите платформу)
Cloudflare (или подобный CDN): Это проще всего. Зайдите в SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) и включите. Установите Max-Age в 6 или 12 месяцев и включите «Apply HSTS policy to subdomains», когда уверены, что все поддомены на HTTPS.
Nginx: добавьте внутри вашего HTTPS-блока server:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache: убедитесь, что mod_headers включён, затем добавьте в ваш HTTPS виртуальный хост:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Microsoft IIS: добавьте в web.config внутри <customHeaders>:
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
Заметка про Google Workspace / Microsoft 365: они питают вашу почту, а не хостинг сайта — HSTS ставится там, где реально живёт ваш публичный сайт (ваш CDN, веб-сервер или конструктор), а не в админке Workspace/365. Если ваш сайт на конструкторе вроде Squarespace, Wix или Shopify, HSTS обычно обрабатывается за вас; проверьте их настройки SSL/безопасности, если наша проверка помечает.
Шаг 3 — Протестируйте на малом, затем зафиксируйте
Начните с max-age=300 (5 минут). Убедитесь, что сайт по-прежнему идеально загружается везде. Затем поднимите до max-age=31536000 (один год). Это полнобалльная настройка.
Шаг 4 (опционально, золотой стандарт) — preload
Когда вы уверены и какое-то время проработали с годовым заголовком с includeSubDomains, можно подать ваш домен на hstspreload.org, чтобы его вшили в браузеры. Это закрывает окно первого визита полностью. Считайте это намеренным обязательством — удаление домена из списка медленное.
Частые ошибки
- Слишком короткий
max-age. Значение в несколько минут или часов выглядит настроенным, но даёт почти никакой защиты — и наша проверка считает всё короче дня провалом. Используйте год. - Включение
includeSubDomainsдо того, как поддомены готовы к HTTPS. Если поддомен не полностью на HTTPS, липкое правило может сделать его недостижимым для посетителей. Сначала переведите каждый поддомен на HTTPS. - Добавление HSTS без перенаправления HTTP-на-HTTPS. HSTS предполагает, что посетители достигают защищённой версии; без перенаправления первый визит без нужды под угрозой. Чините оба вместе.
- Прыжок сразу в
preload, чтобы «сделать тщательно». Preload тяжело отменить. Заслужите его постепенно после стабильного годового заголовка — не торопитесь. - Считать, что замок означает защиту. Замок и HSTS — разные вещи. У вас может быть идеальный сертификат и всё равно провал этой проверки.
Частые вопросы
У нас уже есть HTTPS и замок показывается. Этого недостаточно?
Нет — и это самое частое заблуждение. Замок означает, что соединение МОЖЕТ быть зашифровано; он не принуждает браузеры использовать зашифрованную версию. Без HSTS злоумышленник в той же сети может удержать посетителя на обычном HTTP (это называется срывом SSL) и прочитать всё, что тот вводит, пока клиент видит нормально выглядящий сайт. HSTS — это инструкция, делающая «только зашифрованное» обязательным. HTTPS без HSTS — это запертая дверь, которая на самом деле не защёлкнута.
Это дорого или рискованно включать?
Само исправление бесплатно — это одна строка в вашем веб-сервере или переключатель в CDN — и занимает около 15 минут. Единственная реальная предосторожность: HSTS «липкий». Как только браузер его увидит, он будет отказываться от обычного HTTP для вашего домена столько, сколько вы указали. Поэтому надо быть уверенным, что HTTPS работает на основном сайте И каждом поддомене, прежде чем включать широко. Начните с короткого тестового значения, убедитесь, что ничто не ломается, затем поднимите до года. В таком порядке риск ничтожен.
Как на самом деле выглядит «хорошо»?
Max-age хотя бы в один год (31536000 секунд). Наша проверка даёт полный балл при годе или больше, частичный — при шести месяцах, слабый/частичный — при дне, и считает всё короче дня фактически отсутствующим. Сильнейшая настройка также добавляет includeSubDomains (покрывает shop.вашсайт.com, app.вашсайт.com и т. д.) и preload (вшивает защиту в браузеры, чтобы даже самый первый визит был безопасен).
Что такое «preload» и нужен ли он нам?
HSTS защищает посетителя только ПОСЛЕ того, как его браузер хотя бы раз увидел заголовок, — так что первый запрос совсем нового посетителя всё ещё небольшое окно. Список preload HSTS, встроенный в Chrome, Firefox, Safari и Edge, закрывает это окно, поставляя ваш домен в браузеры заранее. Он опциональный и чуть большее обязательство (удаление медленное), но это золотой стандарт. Для большинства малых бизнесов max-age в один год с includeSubDomains — уже сильный, безопасный результат; preload — дополнительный шаг, когда вы устоялись.
Мы на Squarespace / Wix / Shopify — нам вообще нужно что-то делать?
Большинство полностью хостящихся конструкторов сайтов (Squarespace, Wix, Shopify и подобные) принуждают HTTPS и часто ставят HSTS за вас автоматически — так что вы можете уже проходить без всяких действий. Исключение — когда вы используете собственный домен или CDN перед сайтом; тогда настройка может провалиться в щели. Запустите проверку: если она проходит, вы готовы. Если помечает, исправление — переключатель в настройках SSL/безопасности вашей платформы или одна строка у вашего CDN.
Если мы не исправим, это снизит нашу оценку?
Да. HSTS — оцениваемая проверка веб-безопасности, не информационная: отсутствующий или слишком короткий заголовок стоит баллов и оценивается как высокая серьёзность, потому что он напрямую подставляет данные ваших посетителей в общих сетях. Это ещё и одни из самых дешёвых баллов для возврата: один бесплатный заголовок, около 15 минут работы.