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, die den Körper eines Berichts über Verletzungen einerIntegritätsrichtlinie repräsentiert.
Berichte über Integritätsverletzungen können anReporting-Server-Endpunkte oder über einenReportingObserver gemeldet werden. Sie haben einentype von"integrity-violation", eineurl, die auf das Dokument verweist, das die Verletzung enthält, und einebody-Eigenschaft, die ein Objekt ist, das diesem Wörterbuch entspricht.
In diesem Artikel
Instanz-Eigenschaften
blockedURLSchreibgeschütztEin String, der die URL der Ressource beschreibt, die durch eine durchgesetzte Integritätsrichtlinie blockiert wurde (oder nur für einereportOnly-Richtlinie gemeldet wurde).
documentURLSchreibgeschütztEin String, der die URL des Dokuments beschreibt, das versucht, die Ressource zu laden.
destinationSchreibgeschütztEin String, der das
Request.destinationder Ressource angibt, die blockiert wurde. Dies kann momentan nur"script"sein.reportOnlySchreibgeschütztEin Boolean:
false, wenn die Richtlinie durchgesetzt wurde, undtrue, wenn die Verletzung nur gemeldet wurde.
Beschreibung
Integritätsrichtlinien-Verletzungen werden gemeldet, wenn ein Dokument versucht, eine Ressource zu laden, die nicht denSubresource Integrity-Garantien einer Richtlinie entspricht, die entweder mit den HTTP-HeadernIntegrity-Policy oderIntegrity-Policy-Report-Only festgelegt wurde.
Speziell wird ein Bericht gesendet, wenn ein Dokument versucht, eine<script>-Ressource (oder ein anderesrequest destination, das in der Richtlinie aufgeführt ist) zu laden, die keine gültigen Integritätsmetadaten hat, oder um eine Anfrage imno-cors-Modus zu stellen.
Verletzungsberichte können in einem verletzenden Dokument unter Verwendung einesReportingObserver-Callbacks (definiert imReportingObserver() Konstruktor) erhalten werden, indem auf Berichtsobjekte gefiltert wird, die einentype von"integrity-violation" haben.
Verletzungsberichte können auch als JSON-Objekte inPOST-Anfragen an die in denIntegrity-Policy undIntegrity-Policy-Report-Only Headern angegebenenendpoints gesendet werden. Die JSON-Berichtsobjekte sind eine Serialisierung der Berichte, die imReportingObserver zurückgegeben werden und haben daher ebenfalls einentype von"integrity-violation" und einebody-Eigenschaft, die eine Serialisierung dieses Objekts ist. Beachten Sie, dass Endpunktwerte, die in der Richtlinie festgelegt sind, zu Kennungen passen müssen, die mit demReporting-Endpoints-Header festgelegt wurden.
Beispiele
>Bericht mit der API
Dieses Beispiel zeigt, wie Sie Integritätsrichtlinien-Verletzungsberichte mit einemReportingObserver erhalten können.
Zuerst legen wir die Integritätsrichtlinie einer Seite mit demIntegrity-Policy fest. Die Richtlinie unten berichtet und blockiert das Laden von Ressourcen bei jedem<script>-Element oderHTMLScriptElement-Objekt, das keinintegrity-Attribut angibt, oder wenn eine Skriptressource imno-cors-Modus angefordert wird. Beachten Sie, dass wir uns in diesem Beispiel nur für die Berichterstattung der Verstöße über die API interessieren, daher lassen wir die Reporting-Endpunkte weg:
Integrity-Policy: blocked-destinations=(script)Als nächstes nehmen wir an, dass unsere Seite das folgende Element umfasst, um ein Skript zu laden. Da wir eine Verletzung auslösen möchten, lassen wir dasintegrity-Attribut weg, das verwendet wird, um zu prüfen, ob das Skript 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 mit der Richtlinie übereinstimmt, könnte so aussehen:
<script src="https://example.com/example-framework.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="anonymous"></script>Um Verstöße innerhalb der Seite zu beobachten, konstruieren wir ein neuesReportingObserver-Objekt, um Berichte mit dem Typ"integrity-violation" zu lauschen, indem wir ein Callback übergeben, das die Berichte empfängt und protokolliert. Dieser Code muss vor dem Skript geladen werden, das die Verletzung verursacht, auf derselben Seite:
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 möglicherweise so aussieht wie das untenstehende Objekt.
{ "type": "integrity-violation", "url": "https://example.com", "body": { "documentURL": "https://example.com", "blockedURL": "https://example.com/example-framework.js", "destination": "script", "reportOnly": false }}Einen Bericht an einen Reporting-Endpunkt senden
Die Konfiguration einer Webseite, um einen Integritätsrichtlinien-Verletzungsbericht an einenReporting-Server-Endpunkt zu senden, ist sehr ähnlich zum vorherigen Beispiel.
Der Hauptunterschied besteht darin, dass wir einen oder mehrere Reporting-Endpunkte angeben müssen, an die wir die Berichte senden möchten, indem wir denReporting-Endpoints-Antwortheader verwenden und dann diese imendpoints-Feld bei der Festlegung der Richtlinie referenzieren.
Im Folgenden sehen Sie, wie wir zuerst zwei Endpunkte definieren —integrity-endpoint undbackup-integrity-endpoint — und sie 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 den Richtlinien zur Subresource-Integrität nicht entspricht. Um sich vom vorherigen Beispiel zu unterscheiden, 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 folgenden Beispiel sehen können, ist dertype"integrity-violation" und diebody-Eigenschaft eine Serialisierung diesesIntegrityViolationReportBody-Objekts:
Der Bericht würde in diesem Fall 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> |