CSPViolationReportBody

Limited availability

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

We’d love to hear your thoughts on the next set of proposals for the JavaScript language. You can find a description of the proposals here.
Please take two minutes to fill out our short survey.

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 Inhalt eines Berichts über eine Verletzung der Content Security Policy (CSP) darstellt.

CSP-Verletzungen treten auf, wenn die Webseite versucht, eine Ressource zu laden, die die von der Content-Security-Policy HTTP-Header festgelegte Richtlinie verletzt.

CSP-Verletzungsberichte 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-Verletzungsberichte können auch als JSON-Objekte an den Endpunkt gesendet werden, der in der report-to Richtliniendirektive des Content-Security-Policy Headers angegeben ist. Diese Berichte haben ähnlich einen type von "csp-violation" und eine body Eigenschaft, die eine Serialisierung einer Instanz dieses Interfaces enthält.

Hinweis: CSP-Verletzungsberichte, die von der Reporting API gesendet werden, wenn ein Endpunkt mit der CSP report-to Direktive angegeben ist, sind ähnlich (aber nicht identisch) zu den "CSP-Bericht" JSON-Objekten, die gesendet werden, wenn Endpunkte mit der report-uri Direktive angegeben sind. Die Reporting API und die report-to Direktive sollen das ältere Berichtsformat und die report-uri Direktive ersetzen.

ReportBody CSPViolationReportBody

Instanzeigenschaften

Erbt auch Eigenschaften von seinem übergeordneten Interface, ReportBody.

CSPViolationReportBody.blockedURL Schreibgeschützt

Ein String, der entweder den Typ oder die URL der Ressource darstellt, die blockiert wurde, weil sie die CSP verletzt.

CSPViolationReportBody.columnNumber Schreibgeschützt

Die Spaltennummer im Skript, an der die Verletzung auftrat.

CSPViolationReportBody.disposition Schreibgeschützt

Gibt an, wie die verletzte Richtlinie vom Benutzeragent behandelt werden soll. Dies wird entweder "enforce" oder "report" sein.

CSPViolationReportBody.documentURL Schreibgeschützt

Ein String, der die URL des Dokuments oder des Workers darstellt, in dem die Verletzung festgestellt wurde.

CSPViolationReportBody.effectiveDirective Schreibgeschützt

Ein String, der die Direktive darstellt, deren Durchsetzung die Verletzung aufgedeckt hat.

CSPViolationReportBody.lineNumber Schreibgeschützt

Die Zeilennummer im Skript, an der die Verletzung auftrat.

CSPViolationReportBody.originalPolicy Schreibgeschützt

Ein String, der die Richtlinie enthält, deren Durchsetzung die Verletzung 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 ein Beispiel der Ressource darstellt, die die Verletzung verursacht hat, normalerweise die ersten 40 Zeichen. Dies wird nur ausgefüllt, wenn die Ressource ein eingebettetes Skript, ein Event-Handler oder ein Stil ist — externe Ressourcen, die eine Verletzung verursachen, erzeugen kein Beispiel.

CSPViolationReportBody.sourceFile Schreibgeschützt

Wenn die Verletzung als Ergebnis eines Skripts auftrat, wird dies die URL des Skripts sein; andernfalls wird es null sein. Sowohl columnNumber als auch lineNumber sollten Nicht-Null-Werte haben, wenn diese Eigenschaft nicht null ist.

CSPViolationReportBody.statusCode Schreibgeschützt

Eine Zahl, die den HTTP-Statuscode des Dokuments oder des Workers darstellt, in dem die Verletzung auftrat.

Instanzmethoden

Erbt auch Methoden von seinem übergeordneten Interface, ReportBody.

CSPViolationReportBody.toJSON()

Ein Serializer, der eine JSON-Darstellung des CSPViolationReportBody Objekts zurückgibt.

Beispiele

Abrufen eines CSPViolationReportBody Objekts

Um ein CSPViolationReportBody Objekt abzurufen, müssen Sie Ihre Seite so konfigurieren, dass eine CSP-Verletzung auftritt. In diesem Beispiel werden wir unsere CSP so einstellen, dass nur Inhalte aus dem 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 unseren Content-Security-Policy Header in der HTTP-Antwort:

http
Content-Security-Policy: default-src 'self';

oder im HTML <meta> Element:

html
<meta http-equiv="Content-Security-Policy" content="default-src 'self'" />

Dann werden wir versuchen, ein externes Skript zu laden:

html
<!-- 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-Verletzungen zu hören (dies muss von demselben Ort geladen werden, bevor das Skript geladen wird, das die Verletzung verursacht).

js
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 Verletzungsbericht-Objekt und eine JSON-String-Version des Objekts, die ähnlich wie das unten gezeigte Objekt aussehen könnte. Beachten Sie, dass der body eine Instanz des CSPViolationReportBody ist und der type "csp-violation" ist.

json
{
  "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
  }
}

Senden eines CSP-Verletzungsberichts

Das Konfigurieren einer Webseite zum Senden eines CSP-Verletzungsberichts ist dem vorherigen Beispiel ähnlich. Wie zuvor müssen Sie Ihre Seite so konfigurieren, dass es zu einer Verletzung kommt.

Zusätzlich müssen Sie auch die Endpunkte angeben, an die der Bericht gesendet wird. Ein Server spezifiziert Endpunkte mit dem Reporting-Endpoints Antwortheader: Diese müssen sichere URLs (HTTPS) sein. Die CSP report-to Direktive wird dann verwendet, um anzugeben, dass ein bestimmter Endpunkt für das Berichten von CSP-Verletzungen verwendet wird:

http
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 eine Verletzung auslösen, indem wir ein externes Skript von einem Standort laden, der nicht von unserem CSP-Header erlaubt wird:

html
<!-- This should generate a CSP violation -->
<script src="https://apis.google.com/js/platform.js"></script>

Der Verletzungsbericht wird dann als JSON-Datei an den angegebenen Endpunkt gesendet. Wie Sie aus dem untenstehenden Beispiel sehen können, ist der type "csp-violation" und die body Eigenschaft ist eine Serialisierung des CSPViolationReportBody Objekts:

json
[
  {
    "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
# cspviolationreportbody

Browser-Kompatibilität

Siehe auch