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").