3

コンテンツ セキュリティ ポリシーの便利な機能の 1 つは、違反を検出し、それを (違反レポート) として特定の URI に送信する機能です。CSP 1.1 Secのドキュメントによると。3.2.4 レポート:

違反レポートを送信するには、ユーザー エージェントは次と同等のアルゴリズムを使用する必要があります。

  • 同期フラグを設定せずに、HTTP メソッド POSTを使用して、保護されたリソースのオリジンからレポート URI をフェッチし、レポート ボディで構成されるエンティティ ボディを持つ application/json の Content-Type ヘッダー フィールドを指定します。レポート URI のオリジンが保護されたリソースのオリジンと同じでない場合は、ブロック Cookie フラグも設定する必要があります。ユーザー エージェントは、このリソースを取得するときにリダイレクトに従ってはなりません。(注: ユーザー エージェントは取得したリソースを無視します。)

次に、セクション5.2 違反レポートの例で例を示します。

次の例では、ユーザー エージェントは次の CSP ポリシーを使用してリソースhttp://example.org/page.htmlの表現をレンダリングしました。

default-src 'self'; report-uri http://example.org/csp-report.cgi

保護されたリソースが http://evil.example.com/image.pngから画像を読み込み、ポリシーに違反しました。

{
  "csp-report": {
    "document-uri": "http://example.org/page.html",
    "referrer": "http://evil.example.com/haxor.html",
    "blocked-uri": "http://evil.example.com/image.png",
    "violated-directive": "default-src 'self'",
    "effective-directive": "img-src",
    "original-policy": "default-src 'self'; report-uri http://example.org/csp-report.cgi"
  }
}

例:

test.php

<?php
header("X-Content-Security-Policy: default-src 'self'; report-uri http://127.0.0.1/csp-report.php");
?>
<img src="http://evil.example.com/image.png">

csp-report.php

<?php
$content = "
Keys: ".implode("\n", array_keys($_POST))."\n
\n--------------------------\n\n
Values: ".implode("\n", $_POST)."\n
";
file_put_contents('csp-report.txt', $content, FILE_APPEND | LOCK_EX);
?>

csp-report.txt

Keys: 

--------------------------

Values: 

ご覧のとおり、そのファイルには何も保存されていません。ただし、Firebug を使用すると、レポートがそのファイルに送信されたようです。

ここに画像の説明を入力

注:通常の投稿が機能しない理由と、どの代替手段を使用する必要があるか、およびその理由について言及している分析的な回答を期待しています。また、JSON をデコードする方法を提供することもプラスです。

4

1 に答える 1

3

私は PHP の専門家ではありませんが、POST 本体は単なる json のチャンクであるため、キーと値のペアはありません。array_keys が空であると想定しています。json_decode($POST) したいと思いますhttp://php.net/manual/en/function.json-decode.php

また、あなたの質問は次のように回答されているようです:

PHP での JSON 投稿 (CSP レポート)

注:通常の投稿が機能しない理由と、どの代替手段を使用する必要があるか、およびその理由について言及している分析的な回答を期待しています。

あなたが何を求めているのかわかりませんが、「通常の」POSTに関しては、投稿本文の内容がキーと値のペアでなければならないことを規定する仕様はありません。また、従来の意味でのキーと値のペアは有効な JSON ではありません。

別のおそらく役立つページ: http://silex.sensiolabs.org/doc/cookbook/json_request_body.html

于 2013-08-13T16:45:18.813 に答える