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

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#731
Тут и необходимость этой гадости самой по https работать

Видел уже кучу гадости на https. Бесплатные сертификаты раздаются направо и налево. Поэтому httpS не панацея.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
V
На сайте с 30.09.2004
Offline
144
#732
Цитата:
Сообщение от Vodoleev Посмотреть сообщение
Еще создаются www.google-analytics.com с пустой violated-directive:
Это нормально? Или я что-то не так делаю?

В общем, такие глюки бывают, поскольку на сегодня ещё не все браузеры корректно поддерживают CSP.
Для однозначного ответа надо смотреть как часто это проявляется и на каких ЮзерАгентах.
Цитата:
Сообщение от Thanx Посмотреть сообщение
Не пишите http://. А https:// - нужно писать.

Да, так надо указывать по стандарту CSP, а как делает Vodoleev: http://*.google-analytics.com https://*.google-analytics.com - это "по-жизни".
Дело в том, что мобильный Safari имеет баг в реализации CSP и не понимает домен, если протокол не указан в явном виде.

Поэтому у Vodoleev-а в отчётах не будет ошибок от мобильного Сафари.

Есть ругань на домены Гугл аналитикс, на домены и поддомены своего сайта и на др указанные в конфиге CSP домены. Юзер агент - Google bot или браузер из iphone (разные).

Кстати, для домена www.tns-counter.ru (откуда он подцепляется, кстати?) такие же юзерагенты:

USER_AGENT: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

USER_AGENT: Mozilla/5.0 (iPad; CPU OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Coast/4.40.93868 Mobile/12H143 Safari/7534.48.3

В основном только с этими юзерагентами все записи... По ВСЕМ вылавливаемым доменам - только такие преимущественно юзерагенты. Что это значит? На сайт ходят десятки тысяч в день, а в отчетах CSP только эти юзерагенты. И вообще в отчете несколько десятков файлов за сутки, почти все эти домены из отчета указаны в CSP как разрешенные, но они есть в отчете с указанными выше юзерагентами. Каждый файл имеет по 3-5-10 записей обычно за сутки.

L
На сайте с 07.12.2007
Offline
351
#733
Vodoleev:
Есть ругань на домены Гугл аналитикс, на домены и поддомены своего сайта и на др указанные в конфиге CSP домены. Юзер агент - Google bot или браузер из iphone (разные).

Google bot некорректно поддерживает CSP, хотя занимательно, что робот-индексатор вообще её поддерживает.

У Ipad/Iphone тоже есть свои глюки с CSP.

Vodoleev:
Кстати, для домена www.tns-counter.ru (откуда он подцепляется, кстати?) такие же юзерагенты:

tns-counter.ru сотрудничает с компанией Яндекс, поэтому его тянут за собой многие сервисы Яндекса, в частности - поиск по сайту. Но к Яндексу он не имеет никакого отношения.

Vodoleev:
По ВСЕМ вылавливаемым доменам - только такие преимущественно юзерагенты. Что это значит? На сайт ходят десятки тысяч в день, а в отчетах CSP только эти юзерагенты.

Похоже, ваш csp.php принимает не все отчёты. Скрипт от LEOnidUKG поставили, что ли? У его скрипта есть такой глюк.

V
На сайте с 30.09.2004
Offline
144
#734
Похоже, ваш csp.php принимает не все отчёты. Скрипт от LEOnidUKG поставили, что ли? У его скрипта есть такой глюк.

Нет, скрипт

Рюшечки к csp.php

Более читаемые отчеты + раскладывает по папкам вида 21012015

Может пригодится кому...

<?php
/*function spam($data)
{
$mas***91;***93;=Array(); //список для игнора 'bad_url_1', 'bad_url_2', 'bad_url_3'...

$kol=count($mas);
$result=0;
for ($i=0; $i<$kol; $i++)
{
if ( ($mas***91;$i***93;)&&(strpos($data,$mas***91;$i***93;)) ) $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***91;'DOCUMENT_ROOT'***93;.'/csp/'.date("dmY"))) mkdir($_SERVER***91;'DOCUMENT_ROOT'***93;.'/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***91;1***93;)
{
preg_match('#"violated-directive":"(.*)",#isU',$data,$url1);
$var_array = explode('/',$url***91;1***93;);
if($var_array***91;2***93;)file_put_contents($_SERVER***91;'DOCUMENT_ROOT'***93;.'/csp/'.date("dmY").'/'.$var_array***91;2***93;, 'violated-directive: '.$url1***91;1***93;."\nUSER_AGENT: ".$_SERVER***91;'HTTP_USER_AGENT'***93;."\nIP: ".$_SERVER***91;'REMOTE_ADDR'***93;."\n\r#---------------------------------------------------------------~\n", FILE_APPEND | LOCK_EX);
else file_put_contents($_SERVER***91;'DOCUMENT_ROOT'***93;.'/csp/'.date("dmY").'/'.date("H").'-csp-report.txt', $print_data."\n".$_SERVER***91;'HTTP_USER_AGENT'***93;."\n".$_SERVER***91;'REMOTE_ADDR'***93;."\n----------------------------------------\n", FILE_APPEND | LOCK_EX);


}
else
{

file_put_contents($_SERVER***91;'DOCUMENT_ROOT'***93;.'/csp/'.date("dmY").'/'.date("H").'-csp-report.txt', $print_data."\n".$_SERVER***91;'HTTP_USER_AGENT'***93;."\n".$_SERVER***91;'REMOTE_ADDR'***93;."\n----------------------------------------\n", FILE_APPEND | LOCK_EX);

}
}
#}
}

?>

Ествественно, не в таком виде, тут форум его изменяет. Скрипт ошибок не выдает.

theKashey
На сайте с 22.02.2012
Offline
70
#735

Это не скрипт, а один большой костыль. Данные приходят в разном порядке, и ТАК парсить их нельзя. За такое вообще вон из проффесии.

Замените у него с data_z, до $print_data код на

$object = $object['csp-report'];

$document_uri = $object['document-uri'];
$referrer = $object['referrer'];
$violated_directive = $object['violated-directive'];
$original_policy = $object['original_policy'];
$blocked_uri = $object['blocked-uri'];
$source_file = $object['source-file'];

И парсинг json давайте по старинке сделаем - json_decode($data, true)

А лучше выкиньте и возьмите вариант от Леонида.

L
На сайте с 07.12.2007
Offline
351
#736
theKashey:
Это не скрипт, а один большой костыль. Данные приходят в разном порядке, и ТАК парсить их нельзя. За такое вообще вон из проффесии.
. . .
А лучше выкиньте и возьмите вариант от Леонида.

Угу, а за такую работу с JSON как у Леонида: $spsline=preg_replace('@.*?"blocked-uri":"@smi','',$data); - талоны на доп.питание выдавать?

Вы же сами пишете: "Данные приходят в разном порядке" - где гарантия от потери полей при удалении части строки до blocked-uri?

theKashey
На сайте с 22.02.2012
Offline
70
#737
Ladycharm:
Угу, а за такую работу с JSON как у Леонида: $spsline=preg_replace('@.*?"blocked-uri":"@smi','',$data); - талоны на доп.питание выдавать?
Вы же сами пишете: "Данные приходят в разном порядке" - где гарантия от потери полей при удалении части строки до blocked-uri?

На странице http://zabolotskikh.com/tips/content-security-policy/ в данный момент один json_decode без каких либо костылей.

PS: если это не его скрипт, а "его" сидит где-то в rar архиве - ну камушек в его огород значит.

Digdug
На сайте с 11.07.2012
Offline
119
#738

Ребята, залейте хороший (проверенный) скрипт csp.php на http://pastebin.com/

Спасибо.

A
На сайте с 28.09.2005
Offline
108
#739
Ladycharm:

PS: Правила CSP у вас очень жесткие - полностью запрещены инлайн-скрипты и инлайн-хэндлеры в тэгах (типа onClick, onMouseOver...). Вы их не используете, или всё сделано на jQuery?

навострился сразу на javascript-e

V
На сайте с 30.09.2004
Offline
144
#740
theKashey:
Это не скрипт, а один большой костыль. Данные приходят в разном порядке, и ТАК парсить их нельзя. За такое вообще вон из проффесии.
Замените у него с data_z, до $print_data код на

А лучше выкиньте и возьмите вариант от Леонида.

Это скрипт, который давали в этой теме. Согласен, написан криво.

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

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