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 報告違規。我們從另一個頁面導航到該頁面,並記錄 referrer、documentURL 和 blockedURL。
HTML
首先,我們定義我們的 referrer 頁面 /bounce/index.html。此頁面僅包含一個指向另一個頁面 ../report_sample/index.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-Policy 的 script-src-elem 為 self,這允許從同一域載入指令碼,但不允許執行內聯指令碼。該文件還包含一個內聯指令碼,這將觸發 CSP 違規。
<!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" 的內容違規報告。每次呼叫回撥函式時,我們都會獲取報告陣列的第一個條目的主體,並使用它將違規的 documentURL、referrer 和 blockedURL 記錄到控制檯。
// 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 |
瀏覽器相容性
載入中…