CSPViolationReportBody
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Das CSPViolationReportBody
Interface ist eine Erweiterung der Reporting API, die den Körper eines Content Security Policy (CSP) Verstoßberichts darstellt.
CSP-Verstöße werden ausgelöst, wenn die Webseite versucht, eine Ressource zu laden, die gegen die durch den Content-Security-Policy
HTTP-Header festgelegte Richtlinie verstößt.
CSP-Verstoßberichte werden im reports Parameter von ReportingObserver
Rückrufen zurückgegeben, die einen type
von "csp-violation"
haben.
Die body
-Eigenschaft dieser Berichte ist eine Instanz von CSPViolationReportBody
.
CSP-Verstoßberichte können auch als JSON-Objekte an den in der report-to
Richtliniendirektive des Content-Security-Policy
Headers angegebenen Endpunkt gesendet werden.
Diese Berichte haben ebenfalls einen type
von "csp-violation"
und eine body
-Eigenschaft, die eine Serialisierung einer Instanz dieses Interface enthält.
Hinweis:
CSP-Verstoßberichte, die von der Reporting API gesendet werden, wenn ein Endpunkt mithilfe der CSP report-to
Direktive angegeben wird, sind ähnlich (aber nicht identisch) zu den "CSP-Bericht" JSON-Objekten, die gesendet werden, wenn Endpunkte mithilfe der report-uri
Direktive angegeben werden.
Die Reporting API und die report-to
Direktive sollen das ältere Berichtsformat und die report-uri
Direktive ersetzen.
Instanzeigenschaften
Erbt auch Eigenschaften von seiner Elternschnittstelle, ReportBody
.
CSPViolationReportBody.blockedURL
Schreibgeschützt-
Ein String, der entweder den Typ oder die URL der Ressource darstellt, die gesperrt wurde, weil sie gegen die CSP verstößt.
CSPViolationReportBody.columnNumber
Schreibgeschützt-
Die Spaltennummer im Skript, bei der der Verstoß aufgetreten ist.
CSPViolationReportBody.disposition
Schreibgeschützt-
Gibt an, wie die verletzte Richtlinie vom User-Agent behandelt werden soll. Dies kann
"enforce"
oder"report"
sein. CSPViolationReportBody.documentURL
Schreibgeschützt-
Ein String, der die URL des Dokuments oder Workers darstellt, in dem der Verstoß gefunden wurde.
CSPViolationReportBody.effectiveDirective
Schreibgeschützt-
Ein String, der die Direktive darstellt, deren Durchsetzung den Verstoß aufgedeckt hat.
CSPViolationReportBody.lineNumber
Schreibgeschützt-
Die Zeilennummer im Skript, bei der der Verstoß aufgetreten ist.
CSPViolationReportBody.originalPolicy
Schreibgeschützt-
Ein String, der die Richtlinie enthält, deren Durchsetzung den Verstoß aufgedeckt hat.
CSPViolationReportBody.referrer
Schreibgeschützt-
Ein String, der die URL des Referrers der Ressourcen darstellt, deren Richtlinie verletzt wurde, oder
null
. CSPViolationReportBody.sample
Schreibgeschützt-
Ein String, der eine Probe der Ressource darstellt, die den Verstoß verursacht hat, normalerweise die ersten 40 Zeichen. Dies wird nur befüllt, wenn die Ressource ein Inline-Skript, Event-Handler oder Style ist – externe Ressourcen, die einen Verstoß verursachen, erzeugen keine Probe.
CSPViolationReportBody.sourceFile
Schreibgeschützt-
Wenn der Verstoß durch ein Skript verursacht wurde, wird dies die URL des Skripts sein; andernfalls wird es
null
sein. SowohlcolumnNumber
als auchlineNumber
sollten nicht-null Werte haben, wenn diese Eigenschaft nichtnull
ist. CSPViolationReportBody.statusCode
Schreibgeschützt-
Eine Zahl, die den HTTP-Statuscode des Dokuments oder Workers darstellt, in dem der Verstoß aufgetreten ist.
Instanzmethoden
Erbt auch Methoden von seiner Elternschnittstelle, ReportBody
.
CSPViolationReportBody.toJSON()
Veraltet-
Ein Serializer, der eine JSON-Darstellung des
CSPViolationReportBody
Objekts zurückgibt.
Beispiele
Ein CSPViolationReportBody
Objekt erhalten
Um ein CSPViolationReportBody
Objekt zu erhalten, müssen Sie Ihre Seite so konfigurieren, dass ein CSP-Verstoß auftritt.
In diesem Beispiel werden wir unsere CSP so einstellen, dass nur Inhalte vom eigenen Ursprung der Seite erlaubt sind, und dann versuchen, ein Skript von apis.google.com
zu laden, das ein externer Ursprung ist.
Zuerst setzen wir den Content-Security-Policy
Header in der HTTP-Antwort:
Content-Security-Policy: default-src 'self';
oder im HTML <meta>
Element:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'" />
Dann versuchen wir, ein externes Skript zu laden:
<!-- This should generate a CSP violation -->
<script src="https://apis.google.com/js/platform.js"></script>
Schließlich erstellen wir ein neues ReportingObserver
Objekt, um auf CSP-Verstöße zu lauschen (dies muss vom gleichen Ort geladen werden, bevor das Skript, das den Verstoß verursacht).
const observer = new ReportingObserver(
(reports, observer) => {
reports.forEach((violation) => {
console.log(violation);
console.log(JSON.stringify(violation));
});
},
{
types: ["csp-violation"],
buffered: true,
},
);
observer.observe();
Oben protokollieren wir jedes Verstoßberichtobjekt und eine JSON-String-Version des Objekts, die dem untenstehenden Objekt ähnlich sehen könnte.
Beachten Sie, dass body
eine Instanz des CSPViolationReportBody
ist und type
"csp-violation"
ist.
{
"type": "csp-violation",
"url": "http://127.0.0.1:9999/",
"body": {
"sourceFile": null,
"lineNumber": null,
"columnNumber": null,
"documentURL": "http://127.0.0.1:9999/",
"referrer": "",
"blockedURL": "https://apis.google.com/js/platform.js",
"effectiveDirective": "script-src-elem",
"originalPolicy": "default-src 'self';",
"sample": "",
"disposition": "enforce",
"statusCode": 200
}
}
Einen CSP-Verstoßbericht senden
Das Konfigurieren einer Webseite zum Senden eines CSP-Verstoßberichts ist ähnlich wie das vorherige Beispiel. Wie zuvor müssen Sie Ihre Seite so konfigurieren, dass ein Verstoß auftritt.
Zusätzlich müssen Sie auch die Endpunkte angeben, an die der Bericht gesendet wird.
Ein Server gibt Endpunkte mithilfe des Reporting-Endpoints
Antwort-Headers an: diese müssen sichere URLs (HTTPS) sein.
Die CSP report-to
Direktive wird dann verwendet, um anzugeben, dass ein bestimmter Endpunkt für das Melden von CSP-Verstößen verwendet wird:
Reporting-Endpoints: csp-endpoint="https://example.com/csp-report-to"
Content-Security-Policy: default-src 'self'; report-to csp-endpoint
Wie zuvor können wir einen Verstoß auslösen, indem wir ein externes Skript von einem Ort laden, der von unserem CSP-Header nicht erlaubt ist:
<!-- This should generate a CSP violation -->
<script src="https://apis.google.com/js/platform.js"></script>
Der Verstoßbericht wird dann als JSON-Datei an den angegebenen Endpunkt gesendet.
Wie Sie dem unten stehenden Beispiel entnehmen können, ist type
"csp-violation"
und die body
Eigenschaft ist eine Serialisierung des CSPViolationReportBody
Objekts:
[
{
"age": 53531,
"body": {
"blockedURL": "inline",
"columnNumber": 59,
"disposition": "enforce",
"documentURL": "https://example.com/csp-report-to",
"effectiveDirective": "script-src-elem",
"lineNumber": 1441,
"originalPolicy": "default-src 'self'; report-to csp-endpoint",
"referrer": "https://www.google.com/",
"sample": "",
"sourceFile": "https://example.com/csp-report-to",
"statusCode": 200
},
"type": "csp-violation",
"url": "https://example.com/csp-report-to",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
}
]
Spezifikationen
Specification |
---|
Content Security Policy Level 3 # dictdef-cspviolationreportbody |