簡體   English   中英

如何使用PHP獲取內容安全策略的違規報告(JSON數據)?

[英]How do I get Violation Report (JSON DATA) for Content Security Policy using PHP?

內容安全策略的一個有用功能是能夠檢測違規並將其作為(違規報告)發送到特定URI。 根據CSP 1.1 Sec。的文件 3.2.4報告

要發送違規報告,用戶代理必須使用與以下內容等效的算法:

  • 使用HTTP方法POST從受保護資源的原點獲取報告URI,同時未設置同步標志,其中Content-Type標頭字段為application / json,實體主體由報告主體組成。 如果報告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是加號。

我不是PHP專家,但POST主體只是json的一大塊,因此沒有鍵值對。 我假設array_keys是空的。 我想你想要json_decode($ POST) http://php.net/manual/en/function.json-decode.php

此外,看起來您的問題的答案如下:

PHP中的JSON帖子(CSP-Report)

注意:我希望分析答案提到為什么普通郵件不起作用以及應該使用哪種替代方案,以及為什么?

我不確定你在問什么,但對於“正常”的POST,規范中沒有任何內容規定帖子主體的內容必須是鍵值對。 此外,傳統意義上的鍵/值對不是有效的JSON。

另一個可能有用的頁面: http//silex.sensiolabs.org/doc/cookbook/json_request_body.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM