CSPViolationReportBody: sourceFile-Eigenschaft

Die sourceFile-Schreibgeschützte Eigenschaft der CSPViolationReportBody-Schnittstelle gibt die URL der Quelldatei an, die die Content Security Policy (CSP) verletzt hat.

Bei einer Verletzung, die durch die Verwendung eines Inline-Skripts ausgelöst wird, ist sourceFile die URL des aktuellen Dokuments. Ebenso ist sourceFile die URL des Skripts, wenn ein Dokument erfolgreich ein Skript lädt, das dann die CSP des Dokuments verletzt.

Beachten Sie jedoch, dass wenn ein Dokument mit einer CSP, die externe Ressourcen blockiert, versucht, eine externe Ressource zu laden, sourceFile null sein wird. Dies liegt daran, dass der Browser den Wert aus dem globalen Objekt der Datei extrahiert, die die Verletzung ausgelöst hat. Aufgrund der CSP-Beschränkung wird die externe Ressource nie geladen und hat daher kein entsprechendes globales Objekt.

Diese Eigenschaft ist am nützlichsten zusammen mit CSPViolationReportBody.lineNumber und CSPViolationReportBody.columnNumber, die den Ort innerhalb der Datei angeben, der zu einer Verletzung geführt hat.

Wert

Ein String, der die URL der Datei enthält, die die Verletzung ausgelöst hat, oder null.

Beispiele

CSP Inline-Skript-Verletzung

Dieses Beispiel löst eine CSP-Verletzung mit einem Inline-Skript aus und meldet die Verletzung mit einem ReportingObserver.

HTML

Die untenstehende HTML-Datei verwendet das <meta>-Element, um die Content-Security-Policy default-src auf self zu setzen, was es ermöglicht, Skripte und andere Ressourcen aus demselben Ursprung zu laden, aber keine Inline-Skripte auszuführen erlaubt. Das Dokument enthält auch ein Inline-Skript, das daher 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" />
    <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 obenstehende Dokument lädt auch das externe Skript main.js, das unten gezeigt wird. Da es von derselben Domäne 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 Körper des ersten Eintrags des Berichts-Arrays und verwenden ihn, um die Datei, die Zeile und die Spalte der Verletzung in der Konsole zu protokollieren.

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

Beachten Sie, dass während es mehrere Berichte im zurückgegebenen Array geben kann, wir aus Gründen der Kürze nur die Werte des ersten Elements protokollieren.

Ergebnisse

Sie können dies mit einem lokalen Server ausprobieren. Kopieren Sie den obigen Code in test/index.html und test/main.js und führen Sie den Server im Stammverzeichnis aus. Wenn die Adresse des lokalen Servers http://127.0.0.1:9999 ist, können Sie dann die HTML-Datei von http://127.0.0.1:9999/test/ (oder http://127.0.0.1:9999/test/index.html) laden.

Mit der obigen Konfiguration ist die Ausgabe des Protokolls in Chrome:

sourceFile: http://127.0.0.1:9999/test/
lineNumber: 15
columnNumber: 0

Das Ergebnis ist ähnlich für Firefox:

sourceFile: http://127.0.0.1:9999/test/
lineNumber: 15
columnNumber: 13

Beachten Sie, dass die Spaltennummer in den beiden Browsern unterschiedlich ist. Chrome scheint immer 0 zu melden. Der Wert in Firefox stellt die Position des ersten Zeichens nach dem Ende des öffnenden <script>-Elements dar.

Spezifikationen

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch