CSPViolationReportBody: lineNumber 屬性
CSPViolationReportBody 介面的只讀屬性 lineNumber 指示了觸發 內容安全策略 (CSP) 違規的原始檔中的行號。
請注意,瀏覽器會從觸發違規的檔案全域性物件中提取該值。如果觸發 CSP 違規的資源未載入,則該值為 null。有關更多資訊,請參閱 CSPViolationReportBody.sourceFile。
此屬性與 CSPViolationReportBody.sourceFile 和 CSPViolationReportBody.columnNumber 一起使用最為有用,因為它提供了檔案中導致違規的行的位置以及該列。
值
一個整數,包含觸發違規的行號,或 null。
示例
CSP 內聯指令碼違規
此示例使用內聯指令碼觸發 CSP 違規,並使用 ReportingObserver 報告違規。
HTML
下面的 HTML 檔案使用 <meta> 元素將 Content-Security-Policy 的 default-src 設定為 self,這允許從同一來源載入指令碼和其他資源,但不允許執行內聯指令碼。該文件還包含一個內聯指令碼,因此應該會觸發 CSP 違規。
<!doctype html>
<html lang="en">
<head>
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self'; report-to csp-endpoint" />
<meta
http-equiv="Reporting-Endpoints"
content="csp-endpoint='https://example.com/csp-reports'" />
<script src="main.js"></script>
<title>CSP: Violation due to inline script</title>
</head>
<body>
<h1>CSP: Violation due to inline script</h1>
<script>
const int = 4;
</script>
</body>
</html>
JavaScript (main.js)
上面的文件還載入了外部指令碼 main.js,如下所示。由於它是從與 HTML 相同的域載入的,因此不會被 CSP 阻止。
該指令碼建立一個新的 ReportingObserver 來觀察型別為 "csp-violation" 的內容違規報告。每次呼叫回撥函式時,我們都會獲取報告陣列的第一個條目的主體,並使用它將違規的檔案、行和列記錄到控制檯。
// main.js
const observer = new ReportingObserver(
(reports, observer) => {
const cspViolationBody = reports[0].body;
console.log(`sourceFile: ${cspViolationBody.sourceFile}`);
console.log(`lineNumber: ${cspViolationBody.lineNumber}`);
console.log(`columnNumber: ${cspViolationBody.columnNumber}`);
},
{
types: ["csp-violation"],
buffered: true,
},
);
observer.observe();
請注意,雖然返回的陣列中可能有多份報告,但為了簡潔起見,我們只記錄第一個元素的這些值。
結果
您可以使用 本地伺服器 來嘗試此操作。將上面的程式碼複製到 test/index.html 和 test/main.js 中,並在根目錄中執行伺服器。假設本地伺服器的地址是 http://127.0.0.1:9999,然後您可以從 http://127.0.0.1:9999/test/(或 http://127.0.0.1:9999/test/index.html)載入 HTML 檔案。
使用上述設定,Chrome 上的日誌輸出是
sourceFile: http://127.0.0.1:9999/test/ lineNumber: 15 columnNumber: 0
Firefox 的結果類似
sourceFile: http://127.0.0.1:9999/test/ lineNumber: 15 columnNumber: 13
請注意,兩個瀏覽器報告的列號不同。Chrome 似乎始終報告 0。Firefox 上的值表示結束 <script> 標籤後的第一個字元的位置。
規範
| 規範 |
|---|
| 內容安全策略級別 3 # dom-cspviolationreportbody-linenumber |
瀏覽器相容性
載入中…