CSPViolationReportBody: referrer-Eigenschaft

Limited availability

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

Die schreibgeschützte referrer-Eigenschaft der CSPViolationReportBody-Schnittstelle ist ein String, der die URL der verweisenden Seite der Ressource darstellt, deren Content Security Policy (CSP) verletzt wurde.

Der Referrer ist die Seite, die dazu geführt hat, dass die Seite mit der CSP-Verletzung geladen wurde. Beispielsweise, wenn wir einem Link zu einer Seite mit einer CSP-Verletzung gefolgt sind, ist der referrer die Seite, von der wir navigiert haben.

Wert

Ein String, der die URL des Referrers der Seite mit der CSP-Verletzung darstellt oder null.

Beachten Sie, dass, wenn der Referrer eine HTTP(S)-URL ist, jeglicher Benutzername, Passwort oder Fragment entfernt wird. Wenn das URL-Schema nicht http: oder https: ist, wird nur das Schema zurückgegeben.

Beispiele

CSP-Verletzung eines Inline-Skripts zeigt Referrer

Dieses Beispiel löst eine CSP-Verletzung mit einem Inline-Skript aus und meldet die Verletzung über einen ReportingObserver. Wir navigieren von einer anderen Seite zur Seite und protokollieren den referrer, documentURL und blockedURL.

HTML

Zuerst definieren wir unsere Referrer-Seite /bounce/index.html. Diese Seite enthält nur einen Link zu einer anderen Seite ../report_sample/index.html.

html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  </head>
  <body>
    <ul>
      <li><a href="../report_sample/">report sample</a></li>
    </ul>
  </body>
</html>

Die HTML-Datei ../report_sample/index.html ist unten definiert. Hierbei wird das <meta>-Element verwendet, um die Content-Security-Policy script-src-elem auf self zu setzen, wodurch Skripte vom gleichen Domain geladen werden dürfen, aber keine Inline-Skripts ausgeführt werden dürfen. Das Dokument enthält auch ein Inline-Skript, das eine CSP-Verletzung auslösen wird.

html
<!doctype html>
<!-- /report_sample/index.html -->
<html lang="en">
  <head>
    <meta
      http-equiv="Content-Security-Policy"
      content="script-src-elem 'self' 'report-sample'" />
    <script src="main.js"></script>
  </head>
  <body>
    <script>
      const int = 4;
    </script>
  </body>
</html>

JavaScript (main.js)

Das oben gezeigte Beispiel lädt auch das externe Skript main.js, das unten angezeigt wird. Da dies vom gleichen Domain wie das HTML geladen wird, wird es nicht durch die CSP blockiert.

Das Skript erstellt einen neuen ReportingObserver, um Verletzungsberichte vom Typ "csp-violation" zu beobachten. Jedes Mal, wenn die Callback-Funktion aufgerufen wird, erhalten wir den Inhalt des ersten Eintrags des Bericht-Arrays und verwenden ihn, um die Verletzung documentURL, referrer und blockedURL in der Konsole zu protokollieren.

js
// main.js
const observer = new ReportingObserver(
  (reports, observer) => {
    console.log(`documentURL: ${reports[0].body.referrer}`);
    console.log(`referrer: ${reports[0].body.referrer}`);
    console.log(`blockedURL: ${reports[0].body.blockedURL}`);
  },
  {
    types: ["csp-violation"],
    buffered: true,
  },
);

observer.observe();

Beachten Sie, dass, obwohl es mehrere Berichte im zurückgegebenen Array geben könnte, wir der Kürze halber nur die Werte des ersten Elements protokollieren.

Ergebnisse

Die Konsolenausgabe für den obigen Code würde in etwa wie folgt aussehen (die Site hängt davon ab, wie die Seiten bereitgestellt werden):

documentURL: http://127.0.0.1:9999/report_sample/
referrer: http://127.0.0.1:9999/bounce/
blockedURL: inline

Beachten Sie, dass referrer die Seite ist, von der wir navigiert haben, documentURL die Seite mit der CSP-Verletzung ist, und blockedURL in diesem Fall keine URL ist, sondern ein Hinweis darauf, dass die Verletzung durch ein unsicheres Inline-Skript verursacht wurde.

Spezifikationen

Specification
Content Security Policy Level 3
# dom-cspviolationreportbody-referrer

Browser-Kompatibilität

Siehe auch