CSPViolationReportBody: originalPolicy-Eigenschaft

Die originalPolicy-Schreibgeschützte Eigenschaft des CSPViolationReportBody-Interfaces ist ein String, der die Content Security Policy (CSP) darstellt, deren Durchsetzung die Verletzung aufgedeckt hat.

Dies ist der String im Content-Security-Policy-HTTP-Antwortheader, der die Liste der Direktiven und deren Werte enthält, die die CSP-Policy bilden. Beachten Sie, dass sich dies von der effectiveDirective unterscheidet, die die spezifische Richtlinie ist, die tatsächlich verletzt wird (und die möglicherweise nicht explizit in der Richtlinie aufgeführt ist, wenn default-src verwendet wird).

Wert

Ein String, der die Policy darstellt, deren Durchsetzung die Verletzung aufgedeckt hat.

Beispiele

CSP Inline-Skript-Verletzung

Dieses Beispiel löst eine CSP-Verletzung mit einem Inline-Skript aus und meldet die Verletzung mit einem ReportingObserver. Insbesondere protokolliert es die effectiveDirective und die originalPolicy, um den Unterschied deutlich zu machen.

HTML

Die unten stehende HTML-Datei verwendet das <meta>-Element, um das Content-Security-Policy default-src auf self zu setzen, was das Laden von Skripten und anderen Ressourcen aus derselben Domain erlaubt, aber nicht das Ausführen von Inline-Skripten erlaubt. Das Dokument enthält auch ein Inline-Skript, das eine CSP-Verletzung auslösen sollte.

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)

Das oben genannte Dokument lädt auch das externe Skript main.js, das unten gezeigt wird. Da dies von derselben Domain wie das HTML geladen wird, wird es nicht durch die CSP blockiert.

Das Skript erstellt einen neuen ReportingObserver, um Berichte über Inhaltsverletzungen des Typs "csp-violation" zu beobachten. Jedes Mal, wenn die Rückruffunktion aufgerufen wird, erhalten wir den Body des ersten Eintrags des Berichtsarrays und verwenden ihn, um die effectiveDirective und originalPolicy der Verletzung in der Konsole zu protokollieren.

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();

Beachten Sie, dass, obwohl es mehrere Berichte im zurückgegebenen Array geben kann, der Kürze halber nur die Werte des ersten Elements protokolliert werden.

Ergebnisse

Die Konsolenausgabe für den obigen Code ist:

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

Beachten Sie, dass die originalPolicy mit dem <meta>-Inhalt der Content-Security-Policy-Richtlinie im HTML übereinstimmt und angibt, dass die Policy standardmäßig self ist (default-src 'self').

Die effectiveDirective ist script-src-elem, die gültige Quellen für JavaScript-<script>-Elemente angibt. Dies ist die spezifische Direktive, die tatsächlich verletzt wurde, obwohl default-src in der Richtlinie festgelegt wurde.

Spezifikationen

Specification
Content Security Policy Level 3
# dom-cspviolationreportbody-originalpolicy

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch