HSTS и mixed content: как добить переезд на HTTPS до идеала

Переезд на HTTPS многие считают законченным в тот момент, когда в адресной строке появился замок, — но на самом деле это лишь половина пути. Два недооценённых врага мешают довести защищённое соединение до идеала: смешанный контент (mixed content), когда часть ресурсов страницы продолжает грузиться по незащищённому http, и отсутствие HSTS — механизма, который заставляет браузер всегда ходить по HTTPS и защищает от атак понижения. Из-за смешанного контента браузер показывает предупреждение «не защищено» вместо зелёного замка, блокирует скрипты и стили, а доверие пользователей и поведенческие факторы падают. Без HSTS остаётся лазейка для перехвата трафика. В этой статье разберём, как найти и устранить mixed content, как грамотно и безопасно настроить HSTS, и как окончательно закрыть тему HTTPS на вашем сайте.

HTTPS как фактор и базовая гигиена

Защищённый протокол давно перестал быть опцией. Google официально подтвердил HTTPS как фактор ранжирования ещё в 2014 году, а современные браузеры открыто маркируют http-сайты как небезопасные. Для пользователя замок в адресной строке — сигнал доверия, особенно если речь о вводе данных или оплате. Поэтому базовая установка сертификата сегодня обязательна для любого проекта. Если вы ещё не прошли этот этап или сомневаетесь в корректности настройки, начните с подробного гайда про правильную настройку HTTPS и SSL-сертификата.

Но установить сертификат и настроить редирект с http на https — это только начало. Дьявол прячется в деталях: десятки ссылок на ресурсы внутри страниц, старые записи в базе данных, захардкоженные http-адреса в шаблонах и плагинах. Именно они порождают смешанный контент, из-за которого сайт формально на HTTPS, но фактически не защищён полностью. И именно здесь буксует большинство переездов.

Что такое mixed content и чем он опасен

Смешанный контент возникает, когда страница загружена по HTTPS, но какие-то её ресурсы — картинки, скрипты, стили, шрифты, iframe — подключены по незащищённому http. Получается, что само соединение со страницей зашифровано, а часть содержимого приходит по открытому каналу, который можно перехватить и подменить. Браузер расценивает это как нарушение безопасности и реагирует: убирает зелёный замок, показывает предупреждение, а в части случаев просто блокирует загрузку небезопасного ресурса.

Passive и active mixed content

Смешанный контент делится на два типа, и они опасны по-разному. Пассивный (passive) — это картинки, видео и аудио, загруженные по http. Они не могут изменить остальную часть страницы, поэтому браузер обычно их пропускает, но замок всё равно понижается до предупреждения. Активный (active) — это скрипты, стили, iframe и XHR-запросы. Они способны влиять на всю страницу, поэтому современные браузеры просто блокируют их загрузку по http. В результате может сломаться вёрстка или функциональность: пропадут стили, перестанут работать формы.

ТипПримеры ресурсовРеакция браузера
Passive mixed contentИзображения, видео, аудиоЗамок понижается, предупреждение
Active mixed contentСкрипты, стили, iframe, шрифты, AJAXБлокировка загрузки ресурса

SEO-последствия прямые. Сломанные стили и функциональность ухудшают поведенческие факторы: люди уходят, не разобравшись. Предупреждение «не защищено» подрывает доверие и снижает конверсию. А поскольку HTTPS — фактор ранжирования, частично незащищённый сайт не получает преимущества от переезда в полной мере. Тема входит в общий аудит безопасности, который мы разбираем в материале про аудит безопасности сайта и уязвимости.

Как найти смешанный контент

Поиск mixed content начинается с браузера. Откройте проблемную страницу, запустите DevTools и перейдите на вкладку Console — браузер выводит туда явные предупреждения о каждом небезопасном ресурсе с указанием его адреса. Вкладка Security даёт сводку: безопасна ли страница целиком и какие ресурсы это нарушают. Это самый быстрый способ увидеть проблему на конкретной странице.

  • DevTools Console — выводит предупреждения о каждом http-ресурсе на странице
  • DevTools Security — общая сводка по безопасности и список проблемных ресурсов
  • Сервисы why-no-padlock — онлайн-проверка, почему нет замка на конкретном URL
  • Screaming Frog — массовый поиск http-ссылок по всему сайту при краулинге
  • Поиск http:// в базе данных — особенно в записях контента, настройках и метаданных

Для массового аудита незаменим Screaming Frog: он обходит весь сайт и собирает все ссылки на ресурсы по http в одном отчёте. Но часть проблем прячется глубже — в самой базе данных, где хранятся старые http-адреса в текстах статей, в настройках темы, в полях метаданных. Поэтому отдельно стоит выполнить поиск подстроки http:// по дампу базы данных. Для CMS вроде WordPress это типичная операция при переезде.

Как исправить mixed content

Принцип лечения прост: каждый http-ресурс нужно перевести на https или сделать ссылку нейтральной. Конкретные способы зависят от того, где спрятан адрес.

  1. Замените http на https в ссылках на ресурсы. Если ресурс доступен по защищённому протоколу, просто поменяйте схему адреса.
  2. Используйте относительные или протокол-относительные пути. Адрес вида //example.com/file.js наследует протокол страницы — хотя сегодня предпочтительнее явный https.
  3. Массово обновите базу данных. Поиск и замена http:// на https:// в дампе или через инструмент поиска-замены CMS — аккуратно, с резервной копией.
  4. Добавьте Content-Security-Policy: upgrade-insecure-requests. Этот заголовок заставляет браузер автоматически подгружать все http-ресурсы по https — мощная страховка на переходный период.
  5. Замените или удалите ресурсы без HTTPS. Если внешний ресурс недоступен по https вообще, найдите альтернативу или уберите его.

Директива upgrade-insecure-requests заслуживает отдельного внимания: добавив её в заголовки или мета-тег, вы заставляете браузер автоматически переписывать все небезопасные запросы на https. Это особенно полезно для крупных сайтов с тысячами старых ссылок, где ручная замена нереалистична. Но это страховка, а не замена нормальной чистке — корни проблемы всё равно лучше устранить. Поскольку смешанный контент часто плодит и дубли ресурсов, тема перекликается с гайдом о том, как найти и устранить дублированный контент.

Что такое HSTS и зачем он нужен

Даже с настроенным редиректом с http на https остаётся уязвимость. Первый запрос пользователя к сайту по привычке может уйти по http, и до момента редиректа этот запрос можно перехватить — это называется атакой понижения (downgrade). HSTS (Strict-Transport-Security) закрывает эту дыру. Это HTTP-заголовок, который говорит браузеру: «для этого домена всегда используй только HTTPS, даже не пытайся ходить по http». Получив его однажды, браузер запоминает правило и сам переписывает все будущие запросы на защищённый протокол.

Редирект с http на https защищает уже отправленный запрос. HSTS защищает запрос, который ещё не отправлен, — браузер просто не даёт ему уйти по незащищённому каналу.

Параметры заголовка и осторожность

Заголовок HSTS состоит из нескольких директив. max-age задаёт время в секундах, на которое браузер запоминает правило. includeSubDomains распространяет правило на все поддомены. preload разрешает включить домен в предзагруженный список браузеров. И здесь нужна осторожность, потому что HSTS практически необратим: пока не истечёт max-age, браузер откажется открывать сайт по http вообще. Если у вас останется поддомен без работающего HTTPS, он станет недоступен.

ДирективаНазначениеРекомендация
max-ageСрок запоминания правила в секундахСначала малое значение, затем увеличивать
includeSubDomainsРаспространение на все поддоменыТолько когда все поддомены на HTTPS
preloadВключение в предзагруженный список браузеровФинальный шаг, осознанно и необратимо

Поэтому правильный порядок внедрения такой: сначала задайте небольшой max-age (например, на несколько минут или часов), убедитесь, что всё работает, затем постепенно увеличивайте срок до рекомендуемого года и более. Директиву includeSubDomains добавляйте только когда твёрдо уверены, что все поддомены работают по HTTPS. И лишь после этого, если нужно, переходите к preload — это последний и самый серьёзный шаг.

Preload-лист hstspreload.org

Preload-список — это перечень доменов, встроенный прямо в браузеры. Если домен в нём есть, браузер ходит к нему по HTTPS с самого первого визита, даже не получив заголовок. Чтобы попасть в список, домен подают на hstspreload.org с выполнением жёстких требований: заголовок с includeSubDomains, preload и max-age минимум на год. Удаление из списка — долгая и болезненная процедура, поэтому решение о preload должно быть взвешенным. Для большинства сайтов корректно настроенного HSTS без preload уже достаточно.

Проверка, зеркала и редиректы

После настройки всё нужно проверить. Для глубокого анализа SSL и HSTS используйте SSL Labs — он выставляет оценку конфигурации и отдельно показывает статус HSTS. Сводку по всем заголовкам безопасности, включая Strict-Transport-Security и CSP, даёт securityheaders.com. А корректность отрисовки замка и отсутствие смешанного контента проверяется в DevTools на вкладке Security.

Важно помнить, что HTTPS тесно связан с темой зеркал и склейки доменов. У сайта должна быть одна каноническая версия, а все остальные (http, www и без www) — отдавать 301-редирект на неё. Без этого HSTS и редиректы могут конфликтовать, а вес — размываться между версиями. Подробно это разобрано в материале про зеркала сайта, www, https и склейку. А если переезд на HTTPS только предстоит и вы боитесь потерять позиции, обязательно изучите гайд по миграции сайта без потери позиций.

  • SSL Labs — глубокий аудит SSL-конфигурации и статуса HSTS с итоговой оценкой
  • securityheaders.com — проверка всех заголовков безопасности, включая Strict-Transport-Security
  • DevTools Security — контроль отсутствия смешанного контента и корректности замка
  • hstspreload.org — проверка статуса домена в предзагруженном списке

Если задача кажется слишком технической или вы боитесь сделать HSTS необратимым по ошибке, разумно привлечь специалистов. Мы оказываем услугу доработки сайта с полной настройкой HTTPS, заголовков безопасности и устранением смешанного контента, а также проводим SEO-консультации по безопасной миграции на защищённый протокол.

Итоговый чек-лист

Пройдитесь по списку, чтобы убедиться, что переезд на HTTPS доведён до идеала.

  • SSL-сертификат установлен и валиден, без ошибок цепочки
  • Настроен 301-редирект со всех http-версий на https
  • В DevTools Console и Security нет предупреждений о смешанном контенте
  • База данных очищена от старых http-адресов поиском и заменой
  • При необходимости добавлен заголовок upgrade-insecure-requests
  • HSTS внедрён с осторожным max-age, затем срок увеличен
  • includeSubDomains добавлен только после перевода всех поддоменов на HTTPS
  • Решение о preload принято осознанно, с пониманием необратимости
  • Конфигурация проверена через SSL Labs и securityheaders.com
  • Зеркала склеены, каноническая версия одна

Переезд на HTTPS считается завершённым не тогда, когда появился замок, а когда исчез весь смешанный контент и настроен HSTS, защищающий от атак понижения. Только в этом случае сайт получает полное преимущество защищённого протокола — и в глазах поисковиков, и в глазах пользователей. Если вы хотите довести HTTPS до идеала без риска сломать сайт необратимыми настройками, доверьте задачу профессионалам. Закажите продвижение сайтов с полным техническим сопровождением или начните с комплексного SEO-аудита, который выявит весь смешанный контент и проблемы с заголовками безопасности на вашем сайте.

Услуги LSI Продвижение

Наша команда предлагает полный спектр услуг по SEO-продвижению и технической доработке сайтов. Мы работаем только белыми методами, ориентируемся на реальный бизнес-результат — трафик, заявки и продажи, а не только позиции в отчёте, — и выстраиваем продвижение системно, под конкретные задачи и нишу вашего проекта. Начать можно с бесплатной диагностики, чтобы понять текущее состояние сайта и точки роста, а затем перейти к комплексной работе. Выберите подходящую услугу из списка ниже:

Закажите SEO продвижение сайта

Выведем ваш сайт в ТОП Яндекса и Google. Бесплатная консультация — разберём сайт, найдём точки роста и предложим стратегию продвижения.

Оставить заявку Бесплатный SEO аудит
Аудит сайта

Comments

  • Владислав Тихонов

    Думал, раз замок появился — переезд закончен. А тут оказывается mixed content всё это время тихо гадил. Проверил — половина картинок грузится по http. Спасибо, что ткнули носом!

  • Галина

    Объясните, пожалуйста, разницу между passive и active mixed content подробнее. Почему браузер блокирует скрипты, но картинки просто помечает как небезопасные?

    • Анатолий Кузнецов

      Галина, разница в уровне угрозы. Passive (картинки, видео) не может переписать страницу, поэтому браузер их пропускает, но снимает зелёный замок. Active (скрипты, стили, iframe) может подменить содержимое и перехватить данные, поэтому браузер их жёстко блокирует. Именно из-за заблокированных скриптов часто ломается вёрстка после переезда.

  • Артур Насыров

    Раздел про поиск смешанного контента — топ. Не знал, что можно просто открыть консоль браузера и там все предупреждения по http-ресурсам как на ладони.

  • Елена Дроздова

    А HSTS не опасно включать? Слышала, что если поставить длинный max-age и что-то сломается с сертификатом, сайт станет недоступен и пользователи не смогут зайти. Это правда?

    • Анатолий Кузнецов

      Елена, да, риск реальный, поэтому в статье я и призываю к осторожности. Правильный порядок: сначала ставите короткий max-age (например, на несколько минут), убеждаетесь, что весь сайт стабильно работает по HTTPS, и только потом увеличиваете срок. Длинный max-age и preload — это финальный шаг, когда вы на 100% уверены в сертификате.

  • Семён

    Вопрос по preload-листу hstspreload.org. Стоит ли туда вообще добавляться небольшому сайту или это только для крупных проектов? И как оттуда потом выписаться, если что?

  • Оксана Беляк

    У меня была именно эта проблема: браузер писал не защищено вместо замка, а я не могла понять почему. Оказалось — один старый виджет подгружал скрипт по http. Ваш чек-лист помог найти за 10 минут.

  • Дмитрий

    А как быть со старыми внешними ссылками на http-ресурсы, которые я не контролирую? Например, встроенное видео или счётчик с чужого домена без https. Просто убирать?

  • Раиса Кудрявцева

    Спасибо за раздел про зеркала и редиректы. У меня как раз http и https версии обе были в индексе, и Яндекс не мог определить главное зеркало. Настроила 301 по вашей схеме.

  • Илья Погодин

    Немного напугали разделом про active mixed content. Пошёл проверять свой интернет-магазин — а там платёжный виджет частично по http тянется. Это же вообще критично для безопасности оплаты!

    • Анатолий Кузнецов

      Илья, вы поймали действительно критичную вещь: платёжный виджет по http — это и дыра в безопасности, и заблокированный скрипт. Срочно переводите его на https-версию или свяжитесь с провайдером виджета. Здесь дело не только в SEO, а в защите платёжных данных клиентов, так что это первый приоритет.

  • Вера

    А поведенческие факторы реально проседают из-за предупреждения не защищено? Или это больше про доверие и Яндекс на замок вообще не смотрит как на фактор?

  • Константин Ерёмин

    Начинающий вебмастер, испугался слова HSTS. Но после вашего объяснения про атаку понижения понял, зачем он нужен. Заголовок добавил, всё завелось.

  • Юлия Савельева

    Можете дать пример правильного значения заголовка HSTS? В разделе про параметры вы предупреждаете об осторожности, но конкретную безопасную настройку для старта я так и не уловила.

    • Анатолий Кузнецов

      Юлия, для безопасного старта используйте небольшой max-age без includeSubDomains и без preload — так вы ничем не рискуете и проверяете работу. Когда всё стабильно, наращиваете срок до года и уже потом думаете про includeSubDomains и preload-лист. Точные значения и предостережения я расписал в разделе про параметры заголовка.

  • Глеб

    Прошёл весь итоговый чек-лист по пунктам. Нашёл mixed content в CSS через background-image с http-ссылкой на картинку — вообще не подумал бы туда заглянуть. Спасибо за дотошность.

  • Ангелина Морозова

    А обязательно чинить именно passive mixed content, если он всего лишь помечается, но не блокируется? Или можно забить и заняться только скриптами?

  • Роман

    У меня переезд на HTTPS был год назад, а замка так и нет полностью. По вашей статье понял, что дело в mixed content из старых записей блога, где картинки прописаны абсолютными http-ссылками. Пойду массово менять.

  • Лидия Фомина

    Отличная статья. Особенно ценно предупреждение про осторожность с HSTS перед добавлением в preload — оттуда же реально сложно выписаться, а сертификат мало ли что.

  • Анатолий Гринёв

    А как искать смешанный контент массово по большому сайту, а не вручную по страницам? Есть ли способ прогнать сразу тысячи URL?

    • Анатолий Кузнецов

      Анатолий, для массового поиска гоняйте сайт краулером вроде Screaming Frog — он выгружает все ресурсы, которые грузятся по http, списком. Плюс отчёты в консоли браузера и специальные онлайн-сканеры mixed content. Если объём большой и хочется системно, команда LSI Продвижение делает такой технический аудит целиком.

  • Оставить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.