Jump to content

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 или пишите здесь.

Link to post
Share on other sites
  • 2 weeks later...

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

33eISjt.png

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

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>

    

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
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>

Link to post
Share on other sites
  • 1 month later...

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

<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>

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>
 

 

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"
Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

9244476_m.png

Link to post
Share on other sites

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

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

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

media-src

Link to post
Share on other sites
  • 2 weeks later...
  • 1 month later...

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

Link to post
Share on other sites
  • 2 months later...

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...