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 или сделать ссылку нейтральной. Конкретные способы зависят от того, где спрятан адрес.
- Замените http на https в ссылках на ресурсы. Если ресурс доступен по защищённому протоколу, просто поменяйте схему адреса.
- Используйте относительные или протокол-относительные пути. Адрес вида //example.com/file.js наследует протокол страницы — хотя сегодня предпочтительнее явный https.
- Массово обновите базу данных. Поиск и замена http:// на https:// в дампе или через инструмент поиска-замены CMS — аккуратно, с резервной копией.
- Добавьте Content-Security-Policy: upgrade-insecure-requests. Этот заголовок заставляет браузер автоматически подгружать все http-ресурсы по https — мощная страховка на переходный период.
- Замените или удалите ресурсы без 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 аудит сайта — автоматическая проверка на 50+ параметров за 2 минуты
- Комплексный SEO аудит — глубокий ручной анализ с рекомендациями от эксперта
- Продвижение сайтов — вывод в ТОП Яндекса и Google по целевым запросам
- SEO консультация — разбор вашего сайта с конкретными рекомендациями
- LSI тексты — экспертный контент, оптимизированный для поисковых систем
- Доработка сайта — техническая оптимизация и исправление ошибок
- Создание сайта под ключ — разработка с нуля с SEO-оптимизацией
- Стоимость продвижения — прозрачные тарифы и условия
- Портфолио и кейсы — реальные результаты наших клиентов
Закажите SEO продвижение сайта
Выведем ваш сайт в ТОП Яндекса и Google. Бесплатная консультация — разберём сайт, найдём точки роста и предложим стратегию продвижения.
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 Продвижение делает такой технический аудит целиком.
Оставить комментарий
Мы используем cookies
Для улучшения работы сайта и вашего удобства. Оставаясь на сайте, вы соглашаетесь с политикой конфиденциальности.