Content Security Policy. Настроить и не пропустить редиректы

Автор Тема: Content Security Policy. Настроить и не пропустить редиректы  (Прочитано 3615 раз)

Оффлайн AmetistАвтор темы

  • Глобальный модератор
  • Бизнес оценка: (1, 100%)
  • *****
  • СПАСИБО: 2628
  • Сообщений: 3380
  • Карма: 409
  • Пол: Женский
  • Награды SEO-специалист Мастер поисковой оптимизации Более одной тысячи спасибо Отличный блог 2011 Почетный гражданин нашего форума

Оффлайн AmetistАвтор темы

  • Глобальный модератор
  • *****
1
С прошлого года идет волна уходов сайтов под фильтр Яндекса, который сам Яндекс объясняет так:

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

При этом одни вебмастера прямо признают факт наличия на их сайтах такого редиректа, другие же наоборот отрицают.
Как выясняется: проблема может идти с двух сторон:
1. если вебмастер ставил на свой сайт коды тизерных рекламных сетей;
2. со стороны самих посетителей сайта, которые выходят в Интернет с зараженных браузеров. А в браузерах в свою очередь установлены не менее зараженные плагины, способные подменять легальную рекламу от Google Adsense, Директа, и открывать свои "левые" рекламные одностраничники.

Увидеть такие "левые" урлы можно в Метрике Яндекса -> Отчеты - > Внешние ссылки,
либо в данных Li.ru во внешних переходах. Как это выглядит — на скринах ниже.




Один мой сайт так же попал под такую "метлу" Яндекса, хотя на нем никогда не стояло никаких тизерных рекламных блоков.
Ответ был найдет довольно быстро. Это:
настройка на сайте Content Security Policy

Я не буду описывать подробно, что это такое, так как об этом достаточно информации в сети. Я лишь опишу свои действия. (возможно кому-то они пригодятся).

Приведу два варианта решения данной задачи. Я выбрала второй вариант. Итак, обо всем подробнее.

О самом подопечном сайте: он на движке Wordpress, поэтому искалась доступная реализация настройки CSP именно для данного движка. Вариантов оказалось два:
  • 1. добавление специального кода в .htaccess;
  • 2. добавление кода CSP в header.php темы сайта.

Я отказалась от добавления кода CSP в .htaccess, по причине того, что описано в теме на форуме серча:

   
Цитировать
Правильнее всего заголовки выдавать движком сайта на PHP. Можно проверять UserAgent и:
    - не отдавать CSP "проблемным" браузерам
    - давать другую CSP для мобильных устройств
    - давать другой заголовок («X-WebKit-CSP» или «X-Content-Security-Policy»)

НО, для тех кто все же хочет воспользоваться именно .htaccess, даю можно сказать "универсальный" код.

Вариант первый:

В нем разрешена загрузка:

   
  • с самого домена
  • с счетчиков рамблера, ли.ру, майл.ру, статистика гугла и метрики, видео, виджеты социальных сетей (кроме одноклассников), кнопки шаринга.
  • там, где прописано yoursite.ru, вам нужно прописать свой домен.
  • ВНИМАНИЕ! на некоторых хостингах код, добавляемый в .htaccess, имеющий перенос по строкам, не читается и сам сайт выдает ошибку. (код, который я даю ниже имеет на конце строк переносы).
  • этот вариант тестовый (Content-Security-Policy-Report-Only), то есть ЕЩЕ НИЧЕГО НЕ БЛОКИРУЕТСЯ, он работает в тестовом режиме, и вы по консоли Хрома сможете увидеть, что блокируется нужное вашему сайту, и добавить в этот код.

Код:

(нажмите чтобы показать/скрыть)

       
Цитировать
Google и Яндекс не придерживаются SOP (Same Origin Policy) поэтому лучше продублировать все их домены с https: даже на http:-сайте.
        "Правильность" правил CSP можно оценить только по анализу CSP отчётов.
        Просадки дохода может и не быть, но может резаться что-то из скриптов юзабилити сайта, картинок или стилей.

  То есть вы добавили данный код в ваш .htaccess, сайт работает (значит перенос строк удалять не нужно), следующим шагом вам необходимо в течение суток или немного больше периодически просматривать данные в консоли.
Удобнее пользоваться консолью в браузере Хром: F12 или Дополнительные инструменты -> инструменты разработчика.
Загружаете ваш сайт, нажимаете F12 и внимательно читаете все предупреждения:



Переводите надпись: Refused to load the script '......' because it violates the following Content Security Policy directive: "script-src
здесь говорится, что скрипт заблoкировал такой-то урл согласно правилам, прописанным в CSP в директиве
"script-src

А этот самый урл — это например ваша партнерка от адмитада.
Тогда открываете свой код и в директиву "script-src добавляете вот этот самый заблoкированный домен, пользуясь примером из самого кода.

Допустим в консоли вы получили надпись:

    Refused to load the script 'http://какой-то-домен.ру' because it violates the following Content Security Policy directive: "script-src

А этот http://какой-то-домен.ру блoкировать не нужно, тогда в код в директиву script-src добавляете нужное условие. Например:

Код:
Только зарегистрированные пользователи могут видеть код. Пожалуйста, войдите или зарегистрируйтесь.
между каждой записью пробел.

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

Код:
Только зарегистрированные пользователи могут видеть код. Пожалуйста, войдите или зарегистрируйтесь.
Второй вариант:

Я выбрала данный способ добавления кода в header.php темы сайта.
Но, есть несколько условий правильного добавления:

1. код прописывается до
<!doctype html>
<html>
<head>


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

Код:
Только зарегистрированные пользователи могут видеть код. Пожалуйста, войдите или зарегистрируйтесь.
Полный вариант кода для добавления в header.php (для тестовой установки Content-Security-Policy-Report-Only:

(нажмите чтобы показать/скрыть)

3. После того, как верно вставите код, проверьте через http://www.rexswain.com/httpview.html, что сайт отдаёт заголовки и хостер их не режет.

4. Смотрите, что еще из нужного будет показано в консоли, но отмеченного как вредоносный и не содержащийся в вашей директиве.
Добавляете в код.

5. После тестирования меняете заголовок с
Код:

Код:
Только зарегистрированные пользователи могут видеть код. Пожалуйста, войдите или зарегистрируйтесь.
на

Код:
Только зарегистрированные пользователи могут видеть код. Пожалуйста, войдите или зарегистрируйтесь.

6. Чтобы в одном месте видеть в удобном формате тех, кто пытался прорваться сквозь защиту, можете зарегистрироваться тут: https://report-uri.io/ (это бесплатный сервис, на который будут отправляться данные обо всех заблoкированных урлах).

Если ничего нужного CSP блoкировать не будет - report-uri потом уберёте.

В аккаунте во вкладке Setup есть url вида https://report-uri.io/report/6ryujh.....74hj (это для примера). Его прописываете в директиву report-uri, добавив в конец  кода CSP еще одну строку.
Внимание! Ссылку для report-uri возьмите со своего аккаунта и пропишите:
Код:

(нажмите чтобы показать/скрыть)

Отслеживать в личном кабинете сайта CSP - > Reports и еще 4 варианта отслеживания. Отчеты вот в таком формате:




P.S. Сразу отмечу, что я не являюсь профессиональным программистом, то есть полноценную помощь по настройке вам могут оказать, хорошо разбирающиеся в данной теме программисты.
Я привожу свой опыт, который мог бы пригодиться тем, кто далек от программирования. :)
« Последнее редактирование: 22-10-2015, 17:37:09 от Ametist »


 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
3338 Просмотров
Последний ответ 02-02-2013, 19:48:31
от Ametist
3 Ответов
2321 Просмотров
Последний ответ 20-06-2013, 12:05:19
от Cergo
0 Ответов
803 Просмотров
Последний ответ 06-01-2015, 01:32:24
от bagenova
4 Ответов
1261 Просмотров
Последний ответ 05-06-2015, 12:32:20
от KNAUF
1 Ответов
1157 Просмотров
Последний ответ 06-09-2018, 13:00:37
от ProtectYourSite