Размещение сайтов > Защита сайта от взлома

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

(1/1)

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


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

При этом одни вебмастера прямо признают факт наличия на их сайтах такого редиректа, другие же наоборот отрицают.
Как выясняется: проблема может идти с двух сторон:
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. код обрамляете в

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

А так же каждый отдельный цикл прописываете с точкой и обрамляете двoйными кавычками вначале и закрываете цикл в конце:


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

Полный вариант кода для добавления в 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. Сразу отмечу, что я не являюсь профессиональным программистом, то есть полноценную помощь по настройке вам могут оказать, хорошо разбирающиеся в данной теме программисты.
Я привожу свой опыт, который мог бы пригодиться тем, кто далек от программирования. :)

Навигация

[0] Главная страница сообщений

Перейти к полной версии