Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
IntegrityViolationReportBody
Sicherer Kontext: Diese Funktion ist nur insicheren Kontexten (HTTPS) in einigen oder allenunterstützenden Browsern verfügbar.
DasIntegrityViolationReportBody-Wörterbuch ist eine Erweiterung derReporting API und stellt den Körper eines Berichts über eine Verletzung derIntegrity Policy dar.
Berichte über Integritätsverletzungen können anEndpunkte von Berichtsservern oder über einenReportingObserver gemeldet werden. Sie haben einentype von"integrity-violation", eineurl, die das Dokument angibt, das die Verletzung enthält, und einebody-Eigenschaft, die ein Objekt ist, das mit diesem Wörterbuch übereinstimmt.
In diesem Artikel
Instanzeigenschaften
blockedURLSchreibgeschütztEin String, der die URL der Ressource repräsentiert, die durch eine durchgesetzte Integritätspolitik blockiert wurde (oder nur für einereportOnly-Politik gemeldet wurde).
documentURLSchreibgeschütztEin String, der die URL des Dokuments darstellt, das versucht, die Ressource zu laden.
destinationSchreibgeschütztEin String, der das
Request.destinationder blockierten Ressource angibt.Derzeit kann dies nur"script"sein.reportOnlySchreibgeschütztEin Boolean:
false, wenn die Richtlinie durchgesetzt wurde, undtrue, wenn die Verletzung nur gemeldet wurde.
Beschreibung
Verletzungen der Integritätsrichtlinien werden gemeldet, wenn ein Dokument versucht, eine Ressource zu laden, die nicht denSubresource Integrity-Garantien einer Richtlinie entspricht, die entweder über die HTTP-HeaderIntegrity-Policy oderIntegrity-Policy-Report-Only gesetzt wurde.
Insbesondere wird ein Bericht gesendet, wenn ein Dokument versucht, eine<script>-Ressource (oder ein anderes in der Richtlinie aufgeführtesAnforderungsziel) zu laden, die keine gültigen Integritätsmetadaten aufweist, oder eine Anforderung imno-cors-Modus zu stellen.
Verletzungsberichte können in einem verletzenden Dokument mithilfe einesReportingObserver-Callbacks erhalten werden (definiert imReportingObserver()-Konstruktor), der auf Berichtsobjekte filtert, die einentype von"integrity-violation" haben.
Verletzungsberichte können auch als JSON-Objekte inPOST-Anfragen an die in den HeadernIntegrity-Policy undIntegrity-Policy-Report-Only angegebenenendpoints gesendet werden. Die JSON-Berichtsobjekte sind eine Serialisierung der Berichte, die imReportingObserver zurückgegeben werden, und haben daher auch einentype von"integrity-violation" und einebody-Eigenschaft, die eine Serialisierung dieses Objekts ist. Beachten Sie, dass Endpunktwerte, die in der Richtlinie gesetzt sind, auf Bezeichner abbilden müssen, die mit demReporting-Endpoints-Header gesetzt werden.
Beispiele
>Berichterstattung über die API
Dieses Beispiel zeigt, wie Sie Berichte über Integritätsrichtlinienverletzungen mithilfe einesReportingObserver erhalten können.
Zuerst setzen wir die Integritätspolitik einer Seite mithilfe derIntegrity-Policy. Die untenstehende Richtlinie meldet und blockiert das Laden von Ressourcen jedes<script>-Elements oderHTMLScriptElement-Objekts, das keinintegrity-Attribut angibt, oder wenn eine Skriptressource imno-cors-Modus angefordert wird. Beachten Sie, dass wir in diesem Beispiel nur an der Meldung der Verstöße über die API interessiert sind, daher lassen wir die Reporting-Endpunkte aus:
Integrity-Policy: blocked-destinations=(script)Als nächstes nehmen wir an, dass unsere Seite das folgende Element enthält, um ein Skript zu laden. Da wir eine Verletzung auslösen möchten, lassen wir dasintegrity-Attribut aus, das zum Überprüfen des Skripts verwendet wird, dass es unserer erwarteten Version entspricht. Wir könnten auch dascross-origin-Attribut weglassen, damit die Anfrage imno-cors-Modus gesendet wird.
<script src="https://example.com/example-framework.js" crossorigin="anonymous"></script>Hinweis:Ein Skript, das den Richtlinien entspricht, könnte so aussehen:
<script src="https://example.com/example-framework.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="anonymous"></script>Um Verletzungen innerhalb der Seite zu beobachten, konstruieren wir ein neuesReportingObserver-Objekt, um auf Berichte mit dem Typ"integrity-violation" zu lauschen. Dabei übergeben wir einen Callback, der die Berichte empfängt und protokolliert. Dieser Code muss geladen werden, bevor das Skript, das die Verletzung auslöst, auf derselben Seite geladen wird:
const observer = new ReportingObserver( (reports, observer) => { reports.forEach((violation) => { console.log(violation); console.log(JSON.stringify(violation)); }); }, { types: ["integrity-violation"], buffered: true, },);observer.observe();Oben protokollieren wir jedes Verletzungsberichtobjekt und eine JSON-String-Version des Objekts, die dem folgenden Objekt ähnlich aussehen könnte.
{ "type": "integrity-violation", "url": "https://example.com", "body": { "documentURL": "https://example.com", "blockedURL": "https://example.com/example-framework.js", "destination": "script", "reportOnly": false }}Versenden eines Berichts an einen Reporting-Endpunkt
Die Konfiguration einer Webseite zum Senden eines Berichts über eine Integritätsrichtlinienverletzung an einenEndpunkt des Berichtsservers ist sehr ähnlich wie im vorherigen Beispiel.
Der Hauptunterschied besteht darin, dass wir einen oder mehrere Berichtsendpunkte angeben müssen, an die wir die Berichte senden wollen, indem wir den AntwortheaderReporting-Endpoints verwenden und diese dann imendpoints-Feld bei der Festlegung der Richtlinie referenzieren.
Sie können dies unten sehen, wo wir zuerst zwei Endpunkte definieren —integrity-endpoint undbackup-integrity-endpoint — und diese dann in unserer Richtlinie referenzieren:
Reporting-Endpoints: integrity-endpoint=https://example.com/integrity, backup-integrity-endpoint=https://report-provider.example/integrityIntegrity-Policy: blocked-destinations=(script), endpoints=(integrity-endpoint, backup-integrity-endpoint)Wir können eine Verletzung auslösen, indem wir ein externes Skript von der Seite laden, das nicht den Richtlinien zur Subresource Integrity entspricht. Um vom vorherigen Beispiel etwas abzuweichen, senden wir hier die Anfrage imno-cors-Modus:
<script src="https://example.com/example-framework.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"></script>Der Verletzungsbericht wird dann als JSON-Datei an den angegebenen Endpunkt gesendet. Wie Sie im untenstehenden Beispiel sehen können, ist dertype"integrity-violation" und diebody-Eigenschaft ist eine Serialisierung diesesIntegrityViolationReportBody-Objekts:
Der Bericht in diesem Fall würde genauso aussehen wie unser JSON-Bericht im vorherigen Beispiel.
{ "type": "integrity-violation", "url": "https://example.com", "body": { "documentURL": "https://example.com", "blockedURL": "https://example.com/example-framework.js", "destination": "script", "reportOnly": false }}Spezifikationen
| Specification |
|---|
| Subresource Integrity> # report-violations> |