Настройка CSP - Content Security Policy

Redbaron _chaos
На сайте с 12.08.2009
Offline
673
#201

21 страница занимательного чтива, понял что вещь нужная и архиважная, но как это все реализовать не понял. В старпосте одно, читаешь дальше другое, потом третье...в итоге запутался.

Гуру всех этих настройках, вы можете таким нубам как я выложить пошаговую инструкцию?)

Вот у меня есть сайт на html страничках, висит только Адсенс, счетчик ЛИ и Метрики стоят, пару роликов с Ютуба и флеш на одной странице. Все. Больше на нем ни чего нет.

Куда и что пихать?

Так как за 21 страницу куча разных вариантов.

Гемблинг, беттинг, крипта на весь мир в 3snet, 1500+ офферов. ( https://clck.ru/TdZLM ) = = CPA.HOUSE - Топовая CPA сеть ( https://clck.ru/34Swci )
Ilekor
На сайте с 22.04.2009
Offline
138
#202

Почитал на хабре в блоге Яндекса про CSP

и вот назрел вопрос, в новой технологии CSP можно указывать атрибут nonce, работает ли оно и можно ли его использовать? Ведь обычному люду намного проще в .htaccess указать

Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-eef8264c4994bf6409c51ac7c9614446'

и всем скриптам добавить данный атрибут

например


<script>
alert("Заблокирован, отсутствует атрибут nonce")
</script>

<script nonce="22168992a8d57a5d3a64ca73bb9fc669">
alert("Заблокирован, потому что атрибут nonce не совпадает")
</script>

<script nonce="eef8264c4994bf6409c51ac7c9614446">
alert("Выполнен, потому что атрибут nonce валиден")
</script>

<!-- Заблокирован, потому что атрибут nonce не совпадает -->
<script nonce="22168992a8d57a5d3a64ca73bb9fc669" src="https://otherdomain.com/invalid.js"></script>

Внимание! Информация взята здесь http://habrahabr.ru/company/yandex/blog/206508/%C2%AD/

Лучший дорген 21 века AgDor(http://agdor.info)
samimages
На сайте с 31.05.2009
Offline
427
#203

Redbaron_chaos, если на хостинге в качестве сервера Апач, то сделайте как в этом посте.

На папку csp - можно выставить права - 777, если писать в нее не будет...

Таким образом вы запретите все!

Потом надо будет добавить в каждую директиву, нужные именно вам, домены и поддомены.

Зы: в .htaccess модуль запустить не забываем

<ifModule mod_headers.c>

код csp

</ifModule>

Бывает так, что он в конфиге отключен, тогда сложнее...

Опыт как иммунитет — приобретается в муках! Хостинг: экономия до 1300 руб + домен в подарок ( https://clck.ru/XLscf ) / Аудит семантики от 15К [долго] - ЛС
L
На сайте с 07.12.2007
Offline
351
#204
ctit:
Уже писал, что эти домены были включены в секцию, поскольку их вызывали скрипты рекламных сетей:
. . .
Например, для сети republer.com очень частые гости:

Давайте уточним - мы сейчас говорим про то, "как открыть в CSP объявления Адсенс"?

Тогда, при чём тут все остальные рекламные сети из вашего поста?

- они не имеют никакого отношения к Адсенсу

- если вы не имеете партнёрских отношений с republer.com и yahoo - значит их объявления на ваш сайт вставляет malware. Поэтому они должны быть заблокированы.

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

Поэтому, ещё раз: всё, что блокируется НЕ с доменов Google(смотрите по nslookup) - не имеет отношения к Адсенсу.

PS: С Яндексом такой подход с nslookup не совсем корректен - в Яндексе можно прописать свою лажу на его DNS

ctit:
В итоге:
...
Включил CSP при такой настройке. По стате уже сейчас доход упал в два раза.

Вы добавили в свою CSP не всё, из перечисленного мной в посте. У вас пропущены:

frame-src: *.googleadservices.com
font-src: *.googleapis.com *.gstatic.com
img-src: *.2mdn.net *.googleapis.com *.gstatic.com
с https:// - они перечислены, а c http:// - нет (с http:// в данном случае значит - без указания протокола)

И не смотрите на доходы - доходы сильно зависят от стоимости клика и посещаемости сайта.

Смотрите на ваше среднее количество кликов в сутки или количество показов объявлений(у Адсенса есть такое в статистике) - оно должно несколько увеличиться после установки CSP.

C
На сайте с 07.05.2010
Offline
227
#205
Ladycharm:
Вы добавили в свою CSP не всё, из перечисленного мной в посте. У вас пропущены:

Дело в том, что в отчетах нет данных о блокировке. Сейчас поставил.

В принципе, сейчас начинает доходить, что код известных рекламных сетей, который был пойман в сети в отчетах, просто мог быть вставлен malware.

Ladycharm, правильно ли я понимаю, что в такой типичной ситуации (по крайней мере для моего проекта)


blocked-uri:https://apps.2gis.ru,source-file:http://pagead2.googlesyndication.com
означает, что не надо разрешать apps.2gis.ru в настройках для CSP?

Если так, то действительно правильная настройка CSP должна существенно повысить ctr. Посмотрим.

Ladycharm:
И не смотрите на доходы - доходы сильно зависят от стоимости клика и посещаемости сайта.
Смотрите на ваше среднее количество кликов в сутки или количество показов объявлений(у Адсенса есть такое в статистике) - оно должно несколько увеличиться после установки CSP.

Да нет, как только поправил настройку CSP стата через час стала показывать увеличение дохода. Поэтому пока этой мой главный ориентир.

L
На сайте с 07.12.2007
Offline
351
#206
ctit:
В принципе, сейчас начинает доходить, что код известных рекламных сетей, который был пойман в сети в отчетах, просто мог быть вставлен malware.

Именно так. многие malware используют вставку рекламы от известных партнёрок: Adlabs Media Network, RedClick, mixmarket.biz, marketgid.com, ads.yahoo, партнёрок поиска отелей и тп.

Например, с adblock-teaser.com внедряется скрипт, который показывает рекламу от:

marketgid.com
directadvert.ru
teasernet.com
pay-click.ru
ladycash
teaser-goods.ru
redtram.com
trafmag.com
grt02.com
adriver_banner
smi2.ru
nnn.ru
adv.kp.ru
novostimira.com.ua
24smile.org
advmaker
rarenok.biz
recreativ.ru-viptizer.com
www2.mixmarket.biz"
am15.net
rmbn.net-iframe

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

Собственная реклама есть у немногих malware. Как показало расследование, эти "вредоносы" - это подпольная сторона работы большинства известных тизерок

ctit:
Ladycharm, правильно ли я понимаю, что в такой типичной ситуации (по крайней мере для моего проекта)

blocked-uri:https://apps.2gis.ru,source-file:http://pagead2.googlesyndication.com
означает, что не надо разрешать apps.2gis.ru в настройках для CSP?

Абсолютно правильно понимаете.

Фраза source-file:http://pagead2.googlesyndication.com - по-началу напрягает, но:

- поле "source-file" - экспериментальное и не документировано в CSP. Ваш пример отлично показывает, что там может быть откровенная лажа, поскольку apps.2gis.ru, насколько мне известно, в Адсенсе не рекламируется.

- apps.2gis.ru - это браузерное расширение от 2GIS , оно ловит всё, похожее на номера телефонов на странице, и делает их ссылками на соответствующую страницу справочника 2gis.ru (или на карты Google, если телефона нет в базе данных 2GIS).

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

Вполне возможно, что это браузерное расширение apps.2gis.ru подменяет номера телефонов и в самих рекламных объявлениях Адсенса - apps.2gis.ru работает в самом браузере - у него есть доступ даже внутрь iframe. Насколько корректно оно написано - я не знаю.

ctit:
стата через час стала показывать увеличение дохода. Поэтому пока этой мой главный ориентир
CSP убирает со страниц "левую" рекламу, поэтому растёт число кликов и число показов(потому,что некоторые вредоносы подменяют блоки Адсенса/Директа на свои) ваших легальных объявлений.
Вырастет ли при этом доход - не гарантируется, тк на него влияет стоимость клика и объём трафика на сайте. То есть, он и без CSP "плавает" день ото дня в больших пределах.
Ilekor
На сайте с 22.04.2009
Offline
138
#207

И так, порылся, немного почитал, собрал все во едино, под настроил и немного избавился от ошибок, тестировалось на сайте с посещаемостью более 15к в сутки с разными операционками, мобилками и т.д.

Тут брал php-скрипт для обработки репортов /ru/forum/comment/13456921

Полностью избавится от ошибочных репотов не удалось.

Хак для всех движков и скриптов на PHP, в хтаккес ничего сунуть не нужно.

В самое начало главного файла движка-скрипта вставляем


/*
* Установка заголовков Content-Security-Policy
*/
$uri_report = " report-uri http://example.com/csp.php;"; // урл для репорта
// Указания для CSP
$csp_def = "default-src 'self';
script-src 'self' 'unsafe-inline' 'unsafe-eval' counter.yadro.ru http://c.hit.ua *.yandex.ru yandex.st userapi.com *.google-analytics.com https://pagead2.googlesyndication.com *.googlesyndication.com pagead2.googlesyndication.com https://*.doubleclick.net *.doubleclick.net *.gstatic.com *.liveinternet.ru *.googleapis.com https://graph.facebook.com https://vk.com https://cdn.api.twitter.com http://connect.ok.ru http://connect.mail.ru;
img-src 'self' data: counter.yadro.ru http://c.hit.ua vk.com yastatic.net *.yandex.ru *.googlesyndication.com *.google-analytics.com *.liveinternet.ru;
style-src 'self' 'unsafe-inline';
object-src 'self' *.gstatic.com https://googleads.g.doubleclick.net http://googleads.g.doubleclick.net;
frame-src 'self' vk.com *.vk.com https://vk.com https://*.vk.com *.doubleclick.net https://*.doubleclick.net *.yandex.ru *.youtube.com;
font-src 'self' http://*.gstatic.com:*;{$uri_report}";
// уберем все переносы
$csp_def = str_replace("\r\n",'', $csp_def);
$csp_def = str_replace("\n",'', $csp_def);
// сформируем заголовки
foreach (array("Content-Security-Policy", "X-Content-Security-Policy", "X-WebKit-CSP") as $csp_type)
{
header($csp_type . ": " . $csp_def);
}

В переменной $csp_def указывайте свои домены с которых чего можно, у меня же разрешены авторизация фейсбук, одноклассники, вконтакте, твитер и маилру. Далее адсенс, яндекс, гугл, лайвинтернет и хит.уа.

Очень удобно, что таким способом можно сразу пройтись по своим страницам и увидеть в консоли FireBug кому мы еще не разрешили подгружать скрипты.

P.S. Новичкам рекомендую не боятся всех этих CSP а просто вбить в поиск гугла Content-Security-Policy, отфильтровать сайты на русском и разобрать, что для чего указывается.

P.P.S. Некоторые ошибочные репорты идут скорее всего с зараженных компьютеров а не браузеров (это мысли).

L
На сайте с 07.12.2007
Offline
351
#208
Ilekor:
можно указывать атрибут nonce, работает ли оно и можно ли его использовать?

Можно, атрибут 'nonce-####' так и работает, как вы привели в примерах. НО:

- атбритут 'nonce-####' это рекомендации CSP level 2, хотя его уже поддерживают FF и все браузеры на движке WebKit (Opera, Chrome). На счёт Сафари - не знаю, у меня его нет.

- атбритут 'nonce-####' имеет смысл, когда в директиве script-src не указан 'unsafe-inline' (если он указан - 'nonce-####' теряет смысл, тк все инлайн-скрипты и так разрешены).

- атбритутом 'nonce-####' нельзя подписать inline event handlers типа onClick='' в html-тэгах. А без указания 'unsafe-inline' все такие inline event handlers блокируются браузером.

- атбритутом 'nonce-####' не получится подписать скрипты Директ и Адсенс, потому, что при своей работе они вставляют другие инлайн-скрипты, которые будут уже без nonce.

Redbaron_chaos:
Гуру всех этих настройках, вы можете таким нубам как я выложить пошаговую инструкцию?)
Вот у меня есть сайт на html страничках, висит только Адсенс, счетчик ЛИ и Метрики стоят, пару роликов с Ютуба и флеш на одной странице. Все. Больше на нем ни чего нет.

"Настройка CSP своими руками"(привет, Спектру!):

- Краткая теория настройки CSP, всё остальное - есть в текущем топике.

- Задаёте конкретные вопросы что не понятно или не получается, и получаете конкретные ответы тут.

Если лень читать многабукафф - кидаете сайт в личку, вам лично - я помогу настроить CSP.

slams:
начало выдавать вот такие ошибки:
The source list for Content Security Policy directive 'script-src' contains an invalid source: '//pagead2.googlesyndication.com'. It will be ignored.

Походу, не нравится браузеру, когда http или https:// указан явно. Chrome последней версии

Запись c // в качестве протокола: //ya.ru - не корректна для CSP, надо 'ya.ru https://ya.ru' или 'http://ya.ru https://ya.ru'. Если протокол у домена не указан - считается http://

Ilekor:
Полностью избавится от ошибочных репортов не удалось.

Этого не удалось никому :) Там не всегда очевидно - где ошибка, а где - так и должно быть.

Ilekor:

foreach (array("Content-Security-Policy", "X-Content-Security-Policy", "X-WebKit-CSP") as $csp_type)

Я сейчас уже не делаю выдачу одновременно 3-х заголовков, отдаю только один "Content-Security-Policy".

Как показал эксперимент, на заголовки "X-Content-Security-Policy" и "X-WebKit-CSP" откликаются(шлют отчёты) единичные браузеры.

Но выдача заголовка "X-WebKit-CSP" сносит крышу у Safari (проверяла на Сафари под Windows, другого - нет) - он перестаёт отображать стили.

K
На сайте с 08.04.2010
Offline
89
#209

Ladycharm, здравствуйте.

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

C
На сайте с 07.05.2010
Offline
227
#210

Нашел, пока рыскал по инету инфу.

Взаимосвязь рекламных сетей.

Возможно кому-то поможет, определить malware или код рекламной сети.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий