CSPViolationReportBody: originalPolicy 屬性

CSPViolationReportBody 介面的只讀屬性 originalPolicy 是一個字串,表示導致違規的 內容安全策略 (CSP)

這是 Content-Security-Policy HTTP 響應頭中的字串,其中包含定義 CSP 策略的 指令及其值。請注意,這與 effectiveDirective 不同,effectiveDirective 是實際被違反的具體指令(如果使用了 default-src,則該指令可能並未在策略中明確列出)。

一個表示導致違規的策略的字串。

示例

CSP 內聯指令碼違規

此示例使用內聯指令碼觸發 CSP 違規,並使用 ReportingObserver 報告違規。特別是,它會記錄 effectiveDirectiveoriginalPolicy,從而使它們之間的區別更加清晰。

HTML

下面的 HTML 檔案使用 <meta> 元素將 Content-Security-Policydefault-src 設定為 self,這允許從同一域載入指令碼和其他資源,但不允許執行內聯指令碼。該文件還包含一個內聯指令碼,這應該會觸發 CSP 違規。

html
<!doctype html>
<html lang="en">
  <head>
    <meta
      http-equiv="Content-Security-Policy"
      content="default-src 'self'; report-to csp-endpoint" />
    <!-- This is the (original) CSP policy -->
    <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" 的內容違規報告。每次呼叫回撥函式時,我們都會獲取報告陣列的第一個條目的主體,並使用它將違規的 effectiveDirectiveoriginalPolicy 記錄到控制檯。

js
// main.js
const observer = new ReportingObserver(
  (reports, observer) => {
    console.log(`effectiveDirective: ${reports[0].body.effectiveDirective}`);
    // effectiveDirective: script-src-elem
    console.log(`originalPolicy: ${reports[0].body.originalPolicy}`);
    // originalPolicy: default-src 'self'; report-to csp-endpoint
  },
  {
    types: ["csp-violation"],
    buffered: true,
  },
);

observer.observe();

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

結果

上述程式碼的控制檯輸出為:

effectiveDirective: script-src-elem
originalPolicy: default-src 'self'; report-to csp-endpoint

請注意,originalPolicy 與 HTML 中 Content-Security-Policy 指令的 <meta> 內容匹配,並指定預設策略為 self (default-src 'self')。

effectiveDirectivescript-src-elem,它指定了 JavaScript <script> 元素的有效來源。儘管策略中設定了 default-src,但這是實際被違反的具體指令。

規範

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

瀏覽器相容性

另見