CSPViolationReportBody: lineNumber-Eigenschaft
Die lineNumber
-Schreibgeschützte Eigenschaft der CSPViolationReportBody
-Schnittstelle gibt die Zeilennummer in der Quelldatei an, die die Content Security Policy (CSP)-Verletzung ausgelöst hat.
Bitte beachten Sie, dass der Browser den Wert aus dem globalen Objekt der Datei extrahiert, die die Verletzung verursacht 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 in Kombination mit CSPViolationReportBody.sourceFile
und CSPViolationReportBody.columnNumber
, da sie den Standort der Zeile in der Datei und die Spalte, die zu einer Verletzung führte, liefert.
Wert
Ein Integer, der die Zeilennummer enthält, die die Verletzung verursacht hat, oder null
.
Beispiele
CSP Inline-Skriptverletzung
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, wodurch Skripte und andere Ressourcen vom selben Ursprung geladen werden dürfen, aber keine Inline-Skripte ausgeführt werden können. Das Dokument beinhaltet auch ein Inline-Skript, das somit eine CSP-Verletzung auslösen sollte.
<!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 obige Dokument lädt auch das externe Skript main.js
, das unten gezeigt wird. Da dies vom selben 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 Callback-Funktion 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.
// 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 es zwar mehrere Berichte im zurückgegebenen Array geben kann, wir der Kürze halber jedoch 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 dem obigen Setup 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 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
BCD tables only load in the browser