CSPViolationReportBody: referrer 屬性

CSPViolationReportBody 介面的只讀屬性 referrer 是一個字串,表示資源(其 Content Security Policy (CSP) 被違反)的引用頁面的 URL。

Referrer 是導致 CSP 違規頁面載入的那個頁面。例如,如果我們點選一個連結進入一個 CSP 違規頁面,那麼 referrer 就是我們從中導航過來的頁面。

一個字串,表示帶有 CSP 違規的頁面的 referrer 的 URL,或者為 null

請注意,如果 referrer 是 HTTP(S) URL,則會刪除任何使用者名稱、密碼或片段。如果 URL 方案不是 http:https:,則只返回方案。

示例

顯示 referrer 的 CSP 內聯指令碼違規

此示例使用內聯指令碼觸發 CSP 違規,並使用 ReportingObserver 報告違規。我們從另一個頁面導航到該頁面,並記錄 referrerdocumentURLblockedURL

HTML

首先,我們定義我們的 referrer 頁面 /bounce/index.html。此頁面僅包含一個指向另一個頁面 ../report_sample/index.html 的連結。

html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  </head>
  <body>
    <ul>
      <li><a href="../report_sample/">report sample</a></li>
    </ul>
  </body>
</html>

../report_sample/index.html HTML 檔案定義如下。它使用 <meta> 元素設定 Content-Security-Policyscript-src-elemself,這允許從同一域載入指令碼,但不允許執行內聯指令碼。該文件還包含一個內聯指令碼,這將觸發 CSP 違規。

html
<!doctype html>
<!-- /report_sample/index.html -->
<html lang="en">
  <head>
    <meta
      http-equiv="Content-Security-Policy"
      content="script-src-elem 'self' 'report-sample'" />
    <script src="main.js"></script>
  </head>
  <body>
    <script>
      const int = 4;
    </script>
  </body>
</html>

JavaScript (main.js)

上面的報告示例還載入了外部指令碼 main.js,如下所示。由於這是從與 HTML 相同的域載入的,因此它不會被 CSP 阻止。

該指令碼建立一個新的 ReportingObserver 來觀察型別為 "csp-violation" 的內容違規報告。每次呼叫回撥函式時,我們都會獲取報告陣列的第一個條目的主體,並使用它將違規的 documentURLreferrerblockedURL 記錄到控制檯。

js
// main.js
const observer = new ReportingObserver(
  (reports, observer) => {
    console.log(`documentURL: ${reports[0].body.referrer}`);
    console.log(`referrer: ${reports[0].body.referrer}`);
    console.log(`blockedURL: ${reports[0].body.blockedURL}`);
  },
  {
    types: ["csp-violation"],
    buffered: true,
  },
);

observer.observe();

請注意,雖然返回的陣列中可能有多份報告,但為了簡潔起見,我們只記錄第一個元素的這些值。

結果

上述程式碼的控制檯輸出可能類似於下方(網站將取決於頁面如何提供):

documentURL: http://127.0.0.1:9999/report_sample/
referrer: http://127.0.0.1:9999/bounce/
blockedURL: inline

請注意,referrer 是我們從中導航過來的頁面,documentURL 是發生 CSP 違規的頁面,而 blockedURL 在這種情況下不是 URL,而是表示違規是由不安全的內聯指令碼引起的。

規範

規範
內容安全策略級別 3
# dom-cspviolationreportbody-referrer

瀏覽器相容性

另見