Jump to content
dontfear

Content-Security-Policy защита содержимого страницы

Recommended Posts

За последние пол года произошел бум подмены рекламы на сайте и встраивания дополнительной рекламы. В большинстве случаев это делают установленные в браузер плагины. Вред для вебмастера очевиден, упущенный доход, уменьшение пф и распространение вирусов. Этому явлению подвержены абсолютно все сайты, убедиться в этом можно открыв статистику внешних переходов в ли
g1lETic.png
Это именно клики по такой рекламе.
С помощью хеадера Content-Security-Policy можно убрать большую часть такого зла.
Выкладываю свой и помогу с вашими сайтами.
В моих настройках разрешено: Метрика, ГуглАналитика, РСЯ, Адсенс, UpToLike, Liveinernet, Mail Top 100, VK виджет группы, Google поиск по сайту,
Заменяем ваш_сайт на url вашего сайта (например, pr-cy.ru) и добавляем в .htaccess

<ifModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self' ваш_сайт *.ваш_сайт;\
\
script-src 'self' 'unsafe-inline' 'unsafe-eval' ваш_сайт *.ваш_сайт *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.com top-fwz1.mail.ru counter.yadro.ru www.google.com advapi.ru an.yandex.ru mc.yandex.ru https://mc.yandex.ru https://an.yandex.ru cse.google.com http://10.20.2.42:15871 *.akamaihd.net *.amazonaws.com *.ytimg.com http://*.whisla.com https://*.googleapis.com'>https://*.googleapis.com https://*.google.com'>https://*.google.com *.google.com *.gstatic.com https://*.gstatic.com'>https://*.gstatic.com www.google-analytics.com cse.google.com http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com https://*.google.com'>https://*.google.com http://*.google.com https://www.google-analytics.com http://*.googlesyndication.com https://*.googlesyndication.com'>https://*.googlesyndication.com *.googleapis.com *.doubleclick.net ;\
\
object-src 'self' http://*.ytimg.com *.macromedia.com *.adobe.com https://*.adobe.com'>https://*.adobe.com https://*.googleapis.com'>https://*.googleapis.com http://www.youtube.com https://www.youtube.com *.gstatic.com http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com mc.yandex.ru https://mc.yandex.ru *.googleapis.com *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.com mc.yandex.ru https://mc.yandex.ru;\
\
style-src 'self' 'unsafe-inline' *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.com ваш_сайт *.ваш_сайт http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com https://* cse.google.com www.google.com http://netdna.bootstrapcdn.com fonts.googleapis.com *.googleapis.com;\
\
img-src * data: ваш_сайт *.ваш_сайт top-fwz1.mail.ru counter.yadro.ru *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.com http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com;\
\
media-src 'self' * mediastream: *;\
\
frame-src 'self' 'unsafe-eval' ваш_сайт *.ваш_сайт an.yandex.ru https://an.yandex.ru blocking.stat *.yahoo.com *.uptolike.com vk.com *.hubrus.com www.google.com cse.google.com http://yandex.sc http://www.youtube.com https://www.youtube.com http://*.googlesyndication.com *.doubleclick.net https://*.doubleclick.net https://*.google.com'>https://*.google.com http://*.google.com top-fwz1.mail.ru counter.yadro.ru http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com *.googleapis.com mc.yandex.ru https://mc.yandex.ru *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.com;\
\
font-src 'self' ваш_сайт *.ваш_сайт *.googleapis.com http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com *;\
\
connect-src 'self' https://www.youtube.com *.googlevideo.com https://*.gstatic.com'>https://*.gstatic.com *.google-analytics.com;\
\
report-uri http://ваш_сайт/csp.php"
</IfModule>

Создаем в корне вашего сайта файл csp.php с содержимым

 <?php 
/*function spam($data) 
{ 
     $mas[]=Array(); //список для игнора 'bad_url_1', 'bad_url_2', 'bad_url_3'... 
      
     $kol=count($mas); 
     $result=0; 
     for ($i=0; $i<$kol; $i++) 
     { 
         if ( ($mas[$i])&&(strpos($data,$mas[$i])) ) $i=$kol; 
     } 
     return $result; 
} 
*/ 
header("HTTP/1.0 204 No Response"); 
$data = file_get_contents('php://input'); 
if ($data = json_decode($data)) 
{ 
     $data=stripslashes(json_encode($data)); 
     #if (spam($data)==0) //это если шнягу фильтровать - а так не надо 
     #{ 
         if(!is_dir($_SERVER['DOCUMENT_ROOT'].'/csp/'.date("dmY"))) mkdir($_SERVER['DOCUMENT_ROOT'].'/csp/'.date("dmY"), 0777); 
         else 
         { 
             $data_z = $data; 
             $data_z = str_replace("{","",$data_z); 
             $data_z = str_replace("}","",$data_z); 
             list($hello, $body) = explode("csp-report", $data_z); 
             list($document_uri, $referrer, $violated_directive, $original_policy, $blocked_uri, $source_file, $line_number, $column_number, $status_code) = explode(",", $body); 
             $print_data = "csp-report:\n----------------------------------------\n".$document_uri."\n".$referrer."\n".$violated_directive."\n".$blocked_uri."\n".$source_file."\n".$line_number."\n".$column_number."\n".$status_code."\n"; 
             preg_match('#"blocked-uri":"(.*)",#isU',$data,$url); 
             if ($url[1]) 
             { 
                 preg_match('#"violated-directive":"(.*)",#isU',$data,$url1); 
                 $var_array = explode('/',$url[1]); 
                 if($var_array[2])file_put_contents($_SERVER['DOCUMENT_ROOT'].'/csp/'.date("dmY").'/'.$var_array[2], 'violated-directive: '.$url1[1]."\nUSER_AGENT: ".$_SERVER['HTTP_USER_AGENT']."\nIP: ".$_SERVER['REMOTE_ADDR']."\n\r#---------------------------------------------------------------~\n", FILE_APPEND | LOCK_EX); 
                 else file_put_contents($_SERVER['DOCUMENT_ROOT'].'/csp/'.date("dmY").'/'.date("H").'-csp-report.txt', $print_data."\n".$_SERVER['HTTP_USER_AGENT']."\n".$_SERVER['REMOTE_ADDR']."\n----------------------------------------\n", FILE_APPEND | LOCK_EX); 
              
              
             } 
             else  
             { 
                  
                 file_put_contents($_SERVER['DOCUMENT_ROOT'].'/csp/'.date("dmY").'/'.date("H").'-csp-report.txt', $print_data."\n".$_SERVER['HTTP_USER_AGENT']."\n".$_SERVER['REMOTE_ADDR']."\n----------------------------------------\n", FILE_APPEND | LOCK_EX); 
              
             } 
         } 
     #} 
} 

?> 

Создайте в корне сайта папку csp, в ней будут собираться все скрипты которые пытались загрузиться. Это необходимо чтобы найти нужные заблокированные скрипты. Со временем от сбора этих данных можно отказаться.
Теперь пройдитесь по своему сайту и проверьте, что все скрипты загрузились. Если чего-то не хватает, то курите настройки CSP или пишите здесь.

Share this post


Link to post
Share on other sites

Вот так выглядит статистика после внедрения CSP, было еще пол сотни левых доменов в переходах, но выбрал только самые популярные.

33eISjt.png

Так же замечен рост CTR рекламных объявлений на 10-20%.

Share this post


Link to post
Share on other sites
 

 


<div id="fb-root"></div>

<script>(function(d, s, id) {

  var js, fjs = d.getElementsByTagName(s)[0];

  if (d.getElementById(id)) return;

  js = d.createElement(s); js.id = id;

  js.src = "//connect.facebook.net/ru_RU/sdk.js#xfbml=1&version=v2.3";

  fjs.parentNode.insertBefore(js, fjs);

}(document, 'script', 'facebook-jssdk'));</script>

    

Share this post


Link to post
Share on other sites

<div id="fb-root"></div>

<script>(function(d, s, id) {

  var js, fjs = d.getElementsByTagName(s)[0];

  if (d.getElementById(id)) return;

  js = d.createElement(s); js.id = id;

  js.src = "//connect.facebook.net/ru_RU/sdk.js#xfbml=1&version=v2.3";

  fjs.parentNode.insertBefore(js, fjs);

}(document, 'script', 'facebook-jssdk'));</script>

В script-src и object-src connect.facebook.net https://connect.facebook.net

Share this post


Link to post
Share on other sites

<ifModule mod_headers.c>

Header set Content-Security-Policy "default-src 'self' motivation-life.ru *.motivation-life.ru;\

\

script-src 'self' 'unsafe-inline' 'unsafe-eval' motivation-life.ru *.motivation-life.ru *.advertur.ru https://*.advertur.ru'>https://*.advertur.ru *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.com connect.facebook.net https://connect.facebook.net top-fwz1.mail.ru counter.yadro.ru www.google.com advapi.ru an.yandex.ru mc.yandex.ru https://mc.yandex.ru https://an.yandex.ru cse.google.com http://10.20.2.42:15871 *.akamaihd.net *.amazonaws.com *.ytimg.com http://*.whisla.com https://*.googleapis.com'>https://*.googleapis.com https://*.google.com'>https://*.google.com *.google.com *.gstatic.com https://*.gstatic.com'>https://*.gstatic.com www.google-analytics.com cse.google.com http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com https://*.google.com'>https://*.google.com http://*.google.com https://www.google-analytics.com http://*.googlesyndication.com https://*.googlesyndication.com'>https://*.googlesyndication.com *.googleapis.com *.doubleclick.net ;\

\

object-src 'self' http://*.ytimg.com *.advertur.ru https://*.advertur.ru'>https://*.advertur.ru *.macromedia.com *.adobe.com connect.facebook.net https://connect.facebook.net https://*.adobe.com'>https://*.adobe.com https://*.googleapis.com'>https://*.googleapis.com http://www.youtube.com https://www.youtube.com *.gstatic.com http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com mc.yandex.ru https://mc.yandex.ru *.googleapis.com *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.com mc.yandex.ru https://mc.yandex.ru;\

\

style-src 'self' 'unsafe-inline' *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.com motivation-life.ru *.motivation-life.ru http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com https://* cse.google.com www.google.com http://netdna.bootstrapcdn.com fonts.googleapis.com *.googleapis.com;\

\

img-src * data: motivation-life.ru *.motivation-life.ru top-fwz1.mail.ru counter.yadro.ru *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.comhttp://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com;\

\

media-src 'self' * mediastream: *;\

\

frame-src 'self' 'unsafe-eval' motivation-life.ru *.motivation-life.ru an.yandex.ru https://an.yandex.rublocking.stat *.yahoo.com *.uptolike.com vk.com *.hubrus.com www.google.com cse.google.com http://yandex.sc http://www.youtube.com https://www.youtube.com http://*.googlesyndication.com *.doubleclick.net https://*.doubleclick.net https://*.google.com'>https://*.google.com http://*.google.com top-fwz1.mail.ru counter.yadro.ru http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com *.googleapis.com mc.yandex.ru https://mc.yandex.ru *.vk.com https://*.vk.com'>https://*.vk.com vk.com https://vk.com;\

\

font-src 'self' motivation-life.ru *.motivation-life.ru *.googleapis.com http://*.uptolike.com https://*.uptolike.com'>https://*.uptolike.com *;\

\

connect-src 'self' https://www.youtube.com*.googlevideo.com https://*.gstatic.com'>https://*.gstatic.com *.google-analytics.com;\

\

report-uri http://motivation-life.ru/csp.php"

</IfModule>

Share this post


Link to post
Share on other sites

Здравствуйте! Подскажите пожалуйста как добавить в разрешенные скрипты яндекс браузер, если не сложно...

<div class="ya-site-form ya-site-form_inited_no" onclick="return {'action':'http://site/15261','arrow':true,'bg':'#ff007e','fontsize':12,'fg':'#000000','language':'ru','logo':'rb','publicname':'Поискпо site','suggest':true,'target':'_self','tld':'ru','type':2,'usebigdictionary':false,'searchid':2171748,'webopt':false,'websearch':false,'input_fg':'#000000','input_bg':'#ffffff','input_fontStyle':'normal','input_fontWeight':'normal','input_placeholder':'','input_placeholderColor':'#000000','input_borderColor':'#000000'} "><form action="http://yandex.ru/sitesearch" method="get" target="_self"><input type="hidden" name="searchid" value="2171748"/><input type="hidden" name="l10n" value="ru"/><input type="hidden" name="reqenc" value=""/><input type="search" name="text" value=""/><input type="submit" value="Найти"/></form></div><script type="text/javascript">(function(w,d,c){var s=d.createElement('script'),h=d.getElementsByTagName('script')[0],e=d.documentElement;if((' '+e.className+' ').indexOf(' ya-page_js_yes ')===-1){e.className+=' ya-page_js_yes';}s.type='text/javascript';s.async=true;s.charset='utf-8';s.src=(d.location.protocol==='https:'?'https:':'http:')+'//site.yandex.net/v2.0/js/all.js';h.parentNode.insertBefore(s,h);(w[c]||(w[c]=[])).push(function(){Ya.Site.Form.init()})})(window,document,'yandex_site_callbacks');</script>

Share this post


Link to post
Share on other sites

не вышло(

не вышло(
# Закрываем все нежелательные сторонние скрипты 
<ifModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self' site.biz *.site.biz vs1.site.biz *.vs1.site.biz vs0.site.biz *.vs0.site.biz m.site.biz *.m.site.biz;\
\
script-src 'self' 'unsafe-inline' 'unsafe-eval' site.biz *.site.biz vs1.site.biz *.vs1.site.biz vs0.site.biz *.vs0.site.biz m.site.biz *.m.site.biz http://*.whisla.com http://*.google.com com http://*.googlesyndication.com http://*.sublimevideo.net http://*.mp9.info http://*.sublimevideo.net http://*.mp9.info http://code.jquery.com;\
\
style-src 'self' 'unsafe-inline' http://site.biz*.site.biz vs1.site.biz *.vs1.site.biz vs0.site.biz *.vs0.site.biz m.site.biz *.m.site.biz https://* cse.google.com www.google.com http://maxcdn.bootstrapcdn.com fonts.googleapis.com *.googleapis.com *.yandex.ru https://*.yandex.ru *.yandex.net https://*.yandex.net http://code.jquery.com;\
\
img-src * data: site.biz *.site.biz vs1.site.biz *.vs1.site.biz vs0.site.biz *.vs0.site.biz m.site.biz *.m.site.biz counter.yadro.ru *.yandex.ru https://*.yandex.ru *.yandex.net https://*.yandex.net;\
\
media-src 'self' * mediastream: *;\
\
frame-src 'self' 'unsafe-eval' site.biz *.site.biz vs1.site.biz *.vs1.site.biz vs0.site.biz m.site.biz *.m.site.biz  *.vs0.site.biz an.yandex.ru https://an.yandex.rublocking.stat *.yahoo.com www.google.com cse.google.com http://yandex.sc http://*.googlesyndication.com http://*.google.com counter.yadro.ru http://*.googleapis.com mc.yandex.ru http://*.sublimevideo.net http://*.sublimevideo.net http://sublimevideo.net http://yandex.ru/sitesearch *.yandex.net *.yandex.ru https://*.yandex.ru *.yandex.net https://*.yandex.net;\
\
</IfModule>
 

 

Share this post


Link to post
Share on other sites

В отчетах что-то есть от яши?

Вот такое есть:

Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/36.0.1985.57 Mobile/11A465 Safari/9537.53
95.135.228.53
----------------------------------------
csp-report:
----------------------------------------
"blocked-uri":"http://site.yandex.net"

Share this post


Link to post
Share on other sites

dontfear, тема актуальная на сегодня. Не могли бы подсказать из за чего может выдавать на сайте 502 ошибку при добавлении во все src домены.

Второй вопрос, почему может не работать видео транслирующееся с пом хотлинк на сайте? плеер JW. Домены с которых тянутся, добавлены в script-src и object-src

Share this post


Link to post
Share on other sites

Наткнулся только что на тему, и вспомнил, что на одном моем сайте в прошлом году также была такая проблема, которую никак не мог решить. Постоянно были переходы на другие сайты, ссылок на которые нет на сайте. Думал, что это проблема через того, что у посетителей браузеры заражены и внедряют свой рекламный код вместо моего адсенс и тд.. Но затем эта проблема сама по себе исчезла - были только переходы по ссылкам из статей. Сегодня решил посмотреть в статистике на "переходы на сайты" и увидел, что уже примерно 2 месяца идут такие переходы. И тут я увидел один интересный факт. В прошлом году, сайт находился на одном достаточно популярном хостинге - в этот период были такие переходы. Но с хостингом я это никак не мог повязать. Затем в декабре 2014 я сменил хостинг на менее популярный и сайт на нем находился до марта 2015. Именно в этот период (всю зиму), как я уже увидел подобных переходов не было. Как только я сменил хостинг обратно на старый - снова появились вот такие переходы. Может быть такое совпадение?

9244476_m.png

Share this post


Link to post
Share on other sites

Скорее всего это совпадение. Это никак не связано с хостингом. Это зависит от браузеров с которых заходят пользователи.

Share this post


Link to post
Share on other sites

dontfear, тема актуальная на сегодня. Не могли бы подсказать из за чего может выдавать на сайте 502 ошибку при добавлении во все src домены.

Второй вопрос, почему может не работать видео транслирующееся с пом хотлинк на сайте? плеер JW. Домены с которых тянутся, добавлены в script-src и object-src

Нарушен синтаксис.

media-src

Share this post


Link to post
Share on other sites

Здравствуйте Гуру! спасибо большое за помощь! давно искал! только вот какая проблема: в webmaster.yandex.ru инструмент - Проверка ответа сервера, при выборе любого робота выдает - При обработке запроса произошла ошибка. то есть роботу яндекса закрыт доступ, а это грозит что все страницы выпадут из индекса! Что делать?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...