Start · Sprachen · JavaScript · Referenz · SecurityPolicyViolationEvent.referrer

SecurityPolicyViolationEvent.referrer

Eigenschaft

Schreibgeschützter String mit dem Referrer des Dokuments, in dem die Content Security Policy (CSP) verletzt wurde.

seit JavaScript Baseline: alle modernen Browser (Chrome 41+, Firef Kategorie: webapi

Signatur

SecurityPolicyViolationEvent.referrer

Beschreibung

Die Eigenschaft referrer des Interfaces SecurityPolicyViolationEvent ist schreibgeschützt. Sie enthält die Referrer-URL des Dokuments oder Workers, in dem die Content Security Policy verletzt wurde. Gemeint ist also die Seite, von der aus der Nutzer das betroffene Dokument aufgerufen hat. Die URL der blockierten Ressource selbst gehört nicht dazu, die steht in blockedURI. Der Wert entspricht dem Feld referrer in einem klassischen CSP-Bericht, der per report-uri verschickt wird.

Am meisten bringt die Eigenschaft bei der Auswertung von CSP-Verstößen. Zusammen mit documentURI, blockedURI und violatedDirective lässt sich nachvollziehen, über welchen Einstiegsweg Nutzer auf eine Seite gekommen sind, auf der Verstöße auftreten. So erkennt man zum Beispiel, ob bestimmte Kampagnen-Links oder externe Seiten eingeschleuste Skripte begünstigen, etwa über manipulierte URL-Parameter.

Gibt es keinen Referrer, ist der Wert ein leerer String "". Das passiert bei einem direkten Aufruf oder wenn eine Referrer-Policy wie no-referrer den Referrer unterdrückt. Je nach Policy kann der Wert außerdem gekürzt sein, zum Beispiel auf den Origin (strict-origin-when-cross-origin ist der Standard in modernen Browsern).

Rückgabewert

Typ
string
Beschreibung
Die Referrer-URL des Dokuments, in dem der Verstoß aufgetreten ist, oder "", wenn kein Referrer vorhanden ist oder die Referrer-Policy ihn unterdrückt.

Beispiele

Referrer bei einem CSP-Verstoß protokollieren

document.addEventListener('securitypolicyviolation', (event) => {
  console.log('Verletzte Direktive:', event.violatedDirective);
  console.log('Blockierte Ressource:', event.blockedURI);
  console.log('Referrer:', event.referrer || '(kein Referrer)');
});
Verletzte Direktive: script-src-elem Blockierte Ressource: https://evil.example/x.js Referrer: https://www.google.com/

Verstöße samt Referrer an einen eigenen Endpunkt senden

const sendeCspBericht = (event) => {
  const bericht = {
    dokument: event.documentURI,
    referrer: event.referrer,
    blockiert: event.blockedURI,
    direktive: event.effectiveDirective,
    disposition: event.disposition, // 'enforce' oder 'report'
    zeitpunkt: new Date().toISOString()
  };

  // sendBeacon funktioniert auch beim Verlassen der Seite zuverlässig
  navigator.sendBeacon('/api/csp-berichte', JSON.stringify(bericht));
};

document.addEventListener('securitypolicyviolation', sendeCspBericht);

Verstöße nach Herkunft (Referrer-Origin) gruppieren

const verstoesseProHerkunft = new Map();

document.addEventListener('securitypolicyviolation', ({ referrer }) => {
  let herkunft = 'direkt';
  if (referrer) {
    try {
      herkunft = new URL(referrer).origin;
    } catch {
      herkunft = 'ungültig';
    }
  }
  verstoesseProHerkunft.set(herkunft, (verstoesseProHerkunft.get(herkunft) ?? 0) + 1);
  console.table(Object.fromEntries(verstoesseProHerkunft));
});
┌──────────────────────────┬────────┐ │ (index) │ Values │ ├──────────────────────────┼────────┤ │ https://www.google.com │ 1 │ └──────────────────────────┴────────┘

// Wichtig · Fallstricke

  • Nicht verwechseln: referrer ist der Referrer des Dokuments, nicht die URL der blockierten Ressource. Die steht in blockedURI, die Seite selbst in documentURI.
  • Der Wert hängt von der Referrer-Policy ab. Bei no-referrer ist er immer "". Bei Aufrufen über verschiedene Origins enthält er meist nur den Origin, ohne Pfad und Query-String.
  • Datenschutz: Referrer können personenbezogene Daten oder Tokens in Query-Parametern enthalten. Kürze sie deshalb vor dem Speichern oder Übertragen, zum Beispiel auf new URL(referrer).origin, und beachte die DSGVO.
  • Sicherheit: Wer eigene Berichte serverseitig verarbeitet, sollte den Wert als nicht vertrauenswürdige Eingabe behandeln und nie ungefiltert als HTML ausgeben (XSS-Gefahr in Admin-Dashboards).
  • Das Event wird auch im Modus Content-Security-Policy-Report-Only ausgelöst. Dann ist disposition 'report'.
  • Browser-Kompatibilität: Alle aktuellen Browser unterstützen die Eigenschaft. Firefox erst ab Version 63, ältere Versionen lösen das Event nicht aus.