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