CSPViolationReportBody: lineNumber Eigenschaft

Die schreibgeschützte Eigenschaft lineNumber der CSPViolationReportBody-Schnittstelle gibt die Zeilennummer in der Quelldatei an, die die Content Security Policy (CSP)-Verletzung ausgelöst hat.

Beachten Sie, dass der Browser den Wert aus dem globalen Objekt der Datei extrahiert, die die Verletzung ausgelöst hat. Wenn die Ressource, die die CSP-Verletzung auslöst, nicht geladen wird, ist der Wert null. Weitere Informationen finden Sie unter CSPViolationReportBody.sourceFile.

Diese Eigenschaft ist besonders nützlich zusammen mit CSPViolationReportBody.sourceFile und CSPViolationReportBody.columnNumber, da sie den Ort der Zeile in dieser Datei und die Spalte angibt, die zu einer Verletzung führte.

Wert

Ein Integer, der die Zeilennummer enthält, die die Verletzung ausgelöst hat, oder null.

Beispiele

CSP-Inline-Skript-Verletzung

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

HTML

Die unten stehende HTML-Datei verwendet das <meta>-Element, um das Content-Security-Policy default-src auf self zu setzen, was es ermöglicht, Skripte und andere Ressourcen aus demselben Ursprung zu laden, aber nicht erlaubt, Inline-Skripte auszuführen. Das Dokument enthält außerdem 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 oben beschriebene Dokument lädt auch das externe Skript main.js, das unten gezeigt wird. Da dieses vom selben Domain wie das HTML geladen wird, wird es nicht durch die CSP blockiert.

Das Skript erstellt einen neuen ReportingObserver, um Inhaltsverletzungsberichte vom Typ "csp-violation" zu beobachten. Jedes Mal, wenn die Callback-Funktion aufgerufen wird, erhalten wir den Körper des ersten Eintrags des Berichtsarrays 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, obwohl es möglicherweise mehrere Berichte im zurückgegebenen Array gibt, 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 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 Logs 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 für die beiden Browser unterschiedlich ist. Chrome scheint immer 0 zu melden. Der Wert in Firefox gibt die Position des ersten Zeichens nach dem Ende des öffnenden <script>-Elements an.

Spezifikationen

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch