CSPViolationReportBody: lineNumber-Eigenschaft

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Die schreibgeschützte lineNumber-Eigenschaft der CSPViolationReportBody-Schnittstelle gibt die Zeilennummer in der Quelldatei an, die den Verstoß gegen die Content Security Policy (CSP) verursacht hat.

Beachten Sie, dass der Browser den Wert aus dem globalen Objekt der Datei extrahiert, die den Verstoß verursacht hat. Wenn die Ressource, die den CSP-Verstoß verursacht, nicht geladen wird, ist der Wert null. Siehe CSPViolationReportBody.sourceFile für weitere Informationen.

Diese Eigenschaft ist besonders nützlich in Verbindung mit CSPViolationReportBody.sourceFile und CSPViolationReportBody.columnNumber, da sie die Position der Zeile in dieser Datei und die Spalte, die zu einem Verstoß geführt hat, bereitstellt.

Wert

Ein Integer, der die Zeilennummer enthält, die den Verstoß verursacht hat, oder null.

Beispiele

CSP Inline-Skript-Verstoß

Dieses Beispiel löst einen CSP-Verstoß mit einem Inline-Skript aus und meldet den Verstoß mit einem ReportingObserver.

HTML

Die HTML-Datei unten verwendet das <meta>-Element, um die Content-Security-Policy default-src auf self zu setzen, was das Laden von Skripten und anderen Ressourcen aus demselben Ursprung erlaubt, aber das Ausführen von Inline-Skripten nicht gestattet. Das Dokument enthält auch ein Inline-Skript, das daher einen CSP-Verstoß 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 stehende Dokument lädt auch das externe Skript main.js, welches unten gezeigt wird. Da es vom selben Domain wie das HTML geladen wird, wird es nicht von der CSP blockiert.

Das Skript erstellt einen neuen ReportingObserver, um Berichte über Inhaltsverstöße des Typs "csp-violation" zu beobachten. Jedes Mal, wenn die Callback-Funktion aufgerufen wird, erhalten wir den Body des ersten Eintrags des Berichtsarrays und verwenden ihn, um die Datei, die Zeile und die Spalte des Verstoßes 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 möglicherweise mehrere Berichte im zurückgegebenen Array vorhanden sind, wir der Übersichtlichkeit halber 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. Angenommen, die Adresse des lokalen Servers ist http://127.0.0.1:9999, 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 in 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 repräsentiert die Position des ersten Zeichens nach dem Ende des öffnenden <script>-Elements.

Spezifikationen

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

Browser-Kompatibilität

Siehe auch