Смешанный контент при загрузке с HTTPS: как найти и побороть

Необходимость перехода на HTTPS — это затертая пластинка. Большинство коммерческих сайтов и читаемых блогов уже давно работают на защищенном протоколе. Казалось бы, перешли и забыли. Но нет — Google не дремлет. В свое время он промотивировал вебмастеров переходить на HTTPS, сделав его фактором ранжирования. А теперь пустил в ход «негативное подкрепление» — начал тотальную блокировку ресурсов, подгружаемых по HTTP. И — сюрприз — ваш прекрасный HTTPS может ему не понравиться, потому что на сайте присутствует смешанный контент.


Разбираемся, почему Google его не любит, как его найти и сделать так, чтобы все было хорошо.


Как Google мотивирует переходить на HTTPS: от пряника к кнуту


Борьба Google за безопасность передачи данных путем использования HTTPS началась давно:



Смешанный контент при загрузке с HTTPS: как найти и побороть


Смешанный контент при загрузке с HTTPS: как найти и побороть

  • 2019 — Google объявил, что будет планомерно двигаться к тому, чтобы на HTTPS страницах загружались только HTTPS ресурсы. Как следствие, Chrome начнет блокировать смешанный контент.

Блокировка будет внедряться постепенно:


  • Декабрь 2019 — в Chrome 79 появится возможность разблокировать заблокированное содержимое. С помощью этой опции можно будет разблокировать скрипты, фреймы и другие виды контента, которые Chrome блокирует по умолчанию. Выглядеть эта опция будет так:

Смешанный контент при загрузке с HTTPS: как найти и побороть

  • Январь 2020 — в Chrome 80 аудио- и видеоконтент будет автоматически загружаться с HTTPS. Если загрузка по HTTPS не будет успешной, Chrome заблокирует такие ресурсы. При необходимости пользователи смогут вручную разблокировать их. В Chrome 80 изображения, загружаемые на HTTPS-сайтах c HTTP, блокироваться не будут, но появится сообщение, что соединение небезопасное.

Смешанный контент при загрузке с HTTPS: как найти и побороть

  • Февраль 2020 — в Chrome 81 изображения будут автоматически загружаться с HTTPS. Если они окажутся недоступными, браузер заблокирует их.

Блокировка смешанного контента применяется не только в Chrome. Например, активное содержимое блокирует Firefox (с версии 23), Internet Explorer (с версии 9) и другие браузеры. Но к блокировке картинок, аудио и видеоконтента приступили именно в Google.


В результате стимулирования перехода на защищенный протокол доля сайтов, которые используют HTTPS, за последний год увеличилась с 43,5% до 56,5%.


Смешанный контент при загрузке с HTTPS: как найти и побороть

А 85% страниц, загружаемых в Chrome пользователями из России, передают данные по HTTPS. В 2015 году этот показатель был всего 28%.


Смешанный контент при загрузке с HTTPS: как найти и побороть

С учетом того, что в России браузер Chrome использует около 41% пользователей, к блокировке смешанного контента стоит подготовиться, чтобы не потерять трафик и позиции в органике.


Смешанный контент при загрузке с HTTPS: как найти и побороть

Модуль SEO в системе Promopult: все инструменты для улучшения качества сайта и поискового продвижения. Полный комплекс работ — с нами вы не упустите ни одной мелочи. Чек-листы, подсказки, прозрачная отчетность и рекомендации профессионалов. Гарантии, оплата работ в рассрочку.


Давайте разбираться по порядку.


Что такое смешанный контент и почему его не должно быть на сайте


Смешанный контент (в оригинале — «mixed content») — это когда страница загружается по защищенному HTTPS соединению, но отдельные ресурсы (изображения, стили, скрипты и проч.) — по незащищенному HTTP.


Например, вы перешли на HTTPS (еще нет? вот инструкция). Но на одной из страниц вы по-прежнему загружаете изображение из внешней библиотеки, которая доступна по адресу вида site.ru. Это и есть смешанный контент.


Согласно спецификации W3C, смешанный контент делится на два вида:


  • опционально блокируемый (сюда относятся изображения, видео, аудио);
  • блокируемый (остальной контент — скрипты, стили, фреймы, flash и проч.).

Блокируемый контент является активным. Злоумышленники могут перехватить и изменить активный контент так, чтобы получить полный контроль над страницей или даже всем сайтом. Кража паролей и личных данных пользователей, cookies, перенаправление пользователей на другой сайт, изменение видимого содержимого — это лишь несколько примеров того, какие угрозы несет загрузка активного контента по HTTP.


Из-за высокого потенциального ущерба и риска для пользователей браузерам рекомендовано блокировать такой смешанный контент.


Вот некоторые типы HTTP-запросов, которые считаются активным содержимым:


  • <script> (атрибут src);
  • <link> (атрибут href) (в том числе ссылки в CSS);
  • <iframe> (атрибут src);
  • запросы XMLHttpRequest;
  • запросы fetch();
  • использование ссылок в CSS (font-face, cursor, background-image);
  • <object> (атрибут data).

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


Но опасность сохраняется. Например, злоумышленники могут перехватить изображения или видео и заменить их другими. Это может нанести серьезный ущерб репутации (свежи в памяти истории о появлении видео или картинок с порнографическим содержимым на сайтах федеральных каналов или госучреждений). Кроме того, злоумышленники могут отслеживать, какие страницы просматривали пользователи, какими продуктами интересовались, какой контент просматривали.


Вот типы HTTP-запросов, которые считаются пассивным содержимым:


  • <img> (атрибут src);
  • <audio> (атрибут src);
  • <video> (атрибут src).

Если вы не хотите, чтобы ресурсы на вашем сайте были заблокированы, проведите его аудит, найдите смешанный контент и сделайте так, чтобы он был доступен по HTTPS.


Как обнаружить смешанный контент на сайте


Есть разные способы узнать о том, что на вашем сайте есть смешанный контент.


По иконке в адресной строке браузера


Это самый очевидный способ. Откроем для примера защищенную страницу с изображением, которое подгружается по HTTP. Исходный код страницы такой:


Смешанный контент при загрузке с HTTPS: как найти и побороть

В браузере Chrome видим иконку, при клике по которой получаем пояснение:


Смешанный контент при загрузке с HTTPS: как найти и побороть

В Mozilla Firefox похожая история:


Смешанный контент при загрузке с HTTPS: как найти и побороть

Недостатки способа:


  • непонятно, какие именно ресурсы подгружаются по HTTP;
  • придется каждую страницу проверять вручную.

Поэтому это скорее индикатор, нежели полноценный способ поиска смешанного контента.


С помощью поиска по исходному коду страницы


Открываем исходный HTML код страницы в браузере (Ctrl + U) и ищем фрагмент «http:» (Ctrl + F).


Смешанный контент при загрузке с HTTPS: как найти и побороть

В этом случае мы точно знаем, какие ресурсы подгружаются по HTTP. Но если страниц на сайте много, этот способ не подходит.


Уведомления в консоли разработчика


Открываем в Chrome страницу, которую хотим проверить, и нажимаем Ctrl + Shift + I. На странице есть смешанный контент, о чем свидетельствуют ошибки «Mixed Content» с подробным описанием.


Смешанный контент при загрузке с HTTPS: как найти и побороть

Аналогично можем проверить наличие ошибок в Firefox:


Смешанный контент при загрузке с HTTPS: как найти и побороть

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


SSL-чекер от JitBit


JitBit — это быстрый способ определить страницы сайта, на которых есть смешанный контент. Указываем домен — получаем список «проблемных» URL.


Смешанный контент при загрузке с HTTPS: как найти и побороть

Недостаток в том, что непонятно, какой именно смешанный контент есть на страницах. Придется потом все проверять вручную. Кроме того, сервис не подходит для сайтов, у которых более 300-400 страниц.


Отчет по смешанному контенту в Lighthouse


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


Но по умолчанию в расширении Lighthouse нет отчета по смешанному контенту. Его необходимо запускать из командной строки. Как это сделать:


1. Установите браузер для разработчиков Google Canary.


2. Установите Node.js.


3. Запустите командную строку Node.js.


4. Выполните команду:


npm install -g lighthouse

Начнется инсталляция Lighthouse.


Смешанный контент при загрузке с HTTPS: как найти и побороть

После успешного завершения установки вы получите такое уведомление:


Смешанный контент при загрузке с HTTPS: как найти и побороть

5. Запустите отчет с помощью команды (вместо URL подставьте адрес страницы в формате site.ru):


lighthouse --preset="mixed-content" URL

Начнется формирование отчета.


Смешанный контент при загрузке с HTTPS: как найти и побороть

После завершения система сообщит, в какой папке хранится отчет.


Смешанный контент при загрузке с HTTPS: как найти и побороть

По умолчанию отчеты сохраняются в формате HTML.


Вы можете изменить формат вывода данных с помощью команды --output. Для получения справочной информации по этой и другим командам введите в консоли:


lighthouse --help

Смешанный контент при загрузке с HTTPS: как найти и побороть

В отчете два аудита:


  1. Использование HTTPS.
  2. Безопасная загрузка ресурсов.

Смешанный контент при загрузке с HTTPS: как найти и побороть

Если есть проблемы, будет указано, какие именно ресурсы подгружаются по HTTP.


Отчет Lighthouse Mixed-Content сразу для нескольких URL


Для проверки нескольких URL:


1. Создайте TXT файл и поместите в него список URL для проверки.


Смешанный контент при загрузке с HTTPS: как найти и побороть

2. Создайте файл BAT и поместите в него такой код (в кавычках укажите путь к своему TXT файлу и его название):


@For /F "UseBackQ Delims=" %%A In ("C:\Users\light\urls.txt") Do @LightHouse "%%A" --preset="mixed-content"

3. Запустите файл BAT из командной строки. Если файл хранится в той же папке, что и отчеты, достаточно просто прописать название файла и нажать Enter. В противном случае нужно написать start и через пробел указать адрес файла BAT.


Смешанный контент при загрузке с HTTPS: как найти и побороть

Сколько придется ждать — зависит от количества URL в текстовом файле. По каждому URL вы получите отдельный отчет.


За этот способ спасибо Christopher Giezendanner.


Отчет по смешанному контенту в Screaming Frog SEO Spider


Это, наверное, самый удобный способ. Но, в отличие от предыдущих, он платный. Стоимость программы Screaming Frog SEO Spider — ?149 в год.


Для получения данных запустите отчет «Insecure Content» — и у вас будет список ресурсов с HTTP.


Смешанный контент при загрузке с HTTPS: как найти и побороть

О том, как спарсить с помощью Screaming Frog практически любые данные с любого сайта, читайте в блоге PromoPult.


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


Итак, вы обнаружили на своем сайте смешанный контент. Примерно половина работы сделана. Но нужно еще устранить его. Единого решения нет — действовать придется по ситуации.


Ссылки с HTTP могут вести на внутренние ресурсы и внешние.


После перехода на HTTPS все внутренние ресурсы должны подгружаться с HTTPS. Обычно меняют абсолютные ссылки на относительные, настраивают редиректы, и проблема сразу решается.


С внешними ресурсами не все так просто.


Идеальный сценарий такой:


  • находите URL с HTTP;
  • проверяете, доступен ли этот же ресурс по HTTPS;
  • если да, меняете ссылку с HTTP на HTTPS;
  • проверяете — если все работает, забываете о проблеме.

Но бывает, что ресурсы недоступны по HTTPS. В таком случае есть три решения:


  1. Обратиться к владельцу ресурса и попросить его перейти на HTTPS (это из разряда фантастики).
  2. Найти безопасную альтернативу ресурсу на HTTP (все приличные ресурсы давно перешли на HTTPS).
  3. Ничего не делать (это крайний случай — если вы совсем никак не можете заменить ресурс, и он важен для ваших пользователей).

Чисто технически проще заменить единичный URL (например, в статье вы сослались на сайт без HTTPS). Достаточно открыть исходный код и внести правку.


Но есть URL, которые не исправить одним движением. Например, сюда относятся ссылки в стилях, скриптах, сквозные ссылки и т. п. В этом случае следует подключить программиста или использовать плагины.


Например, для WordPress есть такие плагины:


  • SSL Insecure Content Fixer. Позволяет автоматически исправить ссылки на незащищенные ресурсы. Удобно, что можно выбрать разную «глубину» исправлений и при необходимости игнорировать внешние сайты.

Смешанный контент при загрузке с HTTPS: как найти и побороть

  • Really Simple SSL. Это плагин для быстрого перехода на HTTPS. Он автоматически меняет ссылки на относительные и устраняет смешанный контент. В PRO-версии есть возможность сканировать сайт на наличие смешанного контента.

Смешанный контент при загрузке с HTTPS: как найти и побороть

  • Search & Replace. Плагин для поиска и замены любого контента на сайте, в том числе смешанного. Домены меняются на вкладке «Replace Domain URL».

Смешанный контент при загрузке с HTTPS: как найти и побороть

После замены можно будет просмотреть детали — какие именно ссылки и в каких частях кода были заменены.


Смешанный контент при загрузке с HTTPS: как найти и побороть

При использовании плагинов важно четко понимать, что вы делаете. Мы не рекомендуем вносить изменения без предварительного создания резервной копии сайта. Так вы всегда сможете вернуться к исходной точке.


И да пребудет с вами сила HTTPS.

Комментарии (8)


  1. ss-nopol
    29.11.2019 12:45

    .


    1. PromoPult Автор
      29.11.2019 15:06
      +1

      )


  1. Akuma
    29.11.2019 14:27

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

    Маразм как по мне.


    1. PromoPult Автор
      29.11.2019 15:08

      В тексте есть же совет.


      • Смириться.
      • Попросить (откажут).
      • Найти другую картинку (или переложить к себе).


      1. Akuma
        29.11.2019 15:15

        Тут скорее риторический вопрос к адекватности всего этого :)

        Понятно, что технически это можно решить (хотя в моем варианте, например, ссылки меняются каждые 10 минут и каждый раз перезаливать их к себе… ну так себе).


  1. Meklon
    30.11.2019 14:07

    Спасибо) очень пригодится


    1. PromoPult Автор
      30.11.2019 18:18
      +1

      И вам спасибо, что читаете нас)


  1. Viceroyalty
    30.11.2019 21:04

    Кто-нибудь настраивал https в NGINX UNIT? Что-то не пойму из каких именно файлов нужно составить boundle…