Давно собирался разобраться с политикой безопасности, с помощью которой сайт может диктовать браузеру условия по отработке скриптов и загрузке различных ресурсов.
Суть этой политики - в заголовке страницы передается набор правил, немного похожих на правила блокировщика рекламы. Эти правила выделяют ресурсы, которые на странице браузер может использовать. Соответственно, можно определить, куда отсылать отчет, если правило нарушается. У меня в nginx настроено следующим образом (на момент написания статьи):
Код:
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' site.yandex.net mc.yandex.ru an.yandex.ru api-maps.yandex.ru *.olegon.ru olegon.ru yastatic.net *.google.com *.gstatic.com pagead2.googlesyndication.com adservice.google.ru www.googletagservices.com; object-src 'self' olegon.ru; style-src 'self' 'unsafe-inline' olegon.ru www.google.com; img-src 'self' *.olegon.ru data: avatars.mds.yandex.net *.yandex.ru *.yandex.net olegon.ru *.googlesyndication.com *.google.com; media-src 'self'; frame-src 'self' *.yandex.ru st.yandexadexchange.net yastatic.net *.google.com *.gstatic.com *.youtube.com googleads.g.doubleclick.net; font-src 'self' data: fonts.gstatic.com; connect-src 'self' mc.yandex.ru an.yandex.ru www.google.com *.gstatic.com; report-uri https://olegon.ru/rep.php";
да, заголовок совсем негуманный по размеру в силу того, что я только разбираюсь, если у кого-то возникнут мысли по оптимизации - прошу высказываться.
Соответственно, в rep.php можете записать что-то, вроде такого
Код:
<?php
header("HTTP/1.0 204 No Response");
$data = file_get_contents('php://input');
if ($data = json_decode($data))
{
file_put_contents('/путь к журналу/report.txt', date('m-d H:i').' - '.$_SERVER['REMOTE_ADDR']." \n ".print_r($data,true)."\n", FILE_APPEND | LOCK_EX);
}
?>
если надо выдрать только нужное, то пользуйтесь конструкциями, вроде
Код:
$data->{'csp-report'}->{'blocked-uri'}
Для тех, кто хочет посмотреть результат (я выбрал document-uri, blocked-uri, violated-directive), журнал находится здесь :
https://olegon.ru/csp/ (очищается по выходным)
Кстати, его стоит посмотреть и тем, кто не собирается делать сайты или настраивать директиву.
Дело в том, что в браузерах часто ставят различные расширения, да и сами браузеры любят стучать своим авторам о пользователях. Например, однозначно что-то стучит из UC браузера, видел, что Касперский вмешивается в политику. В общем, можете побродить по форуму, а потом заглянуть в журнал, поискать свой IP.
Для тех, кто не разбирался в том, что я выше написал, сначала в журнале идет адрес страницы, где вы были, потом ресурс, который нарушил политику, затем собственно, тип политики.
Если заметите какие-то странности в журнале - скажите, пожалуйста, мне об этом здесь.
Суть журнала - все, что я знаю, я добавил в исключения политики, все, что не должно по идее, грузиться с форума - попадает в журнал. Мог, конечно, и забыть... Или, например, Яндекс в Казахстане грузит свои ресурсы с kz, тут уж не подгадаешь.