Zum Hauptinhalt springen

Was ist die Referrer-Policy?

Der HTTP-Header, der entscheidet, ob fremde Seiten die volle URL deiner Webseite, nur die Domain — oder gar nichts — sehen, wenn jemand zu ihnen verlinkt.

Was ist der Referrer überhaupt?

Wenn ein Nutzer auf deiner Webseite einen Link zu einer fremden Webseite klickt, schickt der Browser standardmäßig die URL deiner aktuellen Seite mit als Referer-Header (so geschrieben — historischer Tippfehler, der in der RFC verewigt wurde). Der Empfänger sieht damit, von wo der Nutzer kommt. Klingt harmlos, ist es aber oft nicht: URLs enthalten oft sensible Informationen — Reset-Tokens, Session-IDs in der URL, interne Pfade, Suchanfragen.

Klassisches Schreckensbeispiel: Eine Webmail mit URL-basiertem Auth-Token. Klickt der Nutzer auf einen Link in einer Mail, geht der vollständige URL-String inkl. Token an die Ziel-Webseite — die kann sich damit als der Nutzer einloggen.

Die acht Werte

Setzt du den Header Referrer-Policy, kannst du kontrollieren, was übertragen wird:

  • no-referrer — niemals einen Referrer schicken. Maximaler Privacy-Schutz, kann aber bei Analytics und Anti-CSRF Probleme machen.
  • no-referrer-when-downgrade — Referrer nur senden, wenn das Ziel gleich oder sicherer ist (HTTPS → HTTPS ja, HTTPS → HTTP nein). Heute der Browser-Default in Chrome/Firefox.
  • origin — sende nur die Origin (https://deinedomain.de/), nicht den Pfad. Empfohlen, wenn dir eine Privacy-Klasse genügt.
  • origin-when-cross-origin — volle URL bei Same-Origin-Requests, nur Origin bei Cross-Origin.
  • same-origin — Referrer nur bei Same-Origin-Requests; Cross-Origin geht ohne.
  • strict-origin — wie origin, aber nur HTTPS → HTTPS oder HTTP → HTTP. Beim Downgrade kein Referrer.
  • strict-origin-when-cross-origin — der moderne Default-Wert in Chrome 85+ und Firefox 87+. Kombination aus origin-when-cross-origin und strict.
  • unsafe-url — immer die volle URL, auch beim Downgrade. Nicht verwenden.

Empfehlung

Für die meisten Webseiten ist strict-origin-when-cross-origin der richtige Wert — ist auch der moderne Browser-Default und braucht eigentlich nur explizit gesetzt zu werden, um abweichende Browser-Defaults zu vereinheitlichen.

Bei besonders Privacy-sensiblen Seiten (Banken, Gesundheitsportale, juristische Beratung): no-referrer oder strict-origin. Der Trade-off: Analytics-Tools können dann nicht mehr sehen, von wo der Nutzer kam.

Konfigurationsbeispiele

nginx:

add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Apache:

Header always set Referrer-Policy "strict-origin-when-cross-origin"

HTML-Meta (Fallback, z. B. bei statischen Seiten):

<meta name="referrer" content="strict-origin-when-cross-origin">

Pro Link überschreiben

Auf einzelnen Links kannst du das Standardverhalten per rel-Attribut überschreiben:

<a href="https://fremde.de" rel="noreferrer noopener">Externer Link</a>

noreferrer wirkt wie no-referrer für nur diesen Link. noopener verhindert zusätzlich, dass die geöffnete Seite per window.opener auf deine zurückzeigen kann (wichtig bei target="_blank").

Selbst prüfen: HTTP-Header

HSTS, CSP, X-Frame-Options & Co. Gib eine Domain ein und sieh in Sekunden, wie es um deinen REFERRER-POLICY steht.

Auch im Lexikon