Inhaltsverzeichnis
- Was ist eine Referrer Policy?
- Der HTTP Referer Header
- Verfügbare Referrer Policies
- Sicherheits- und Privacy-Aspekte
- Implementierung
- Fallstudie: Das PraxWert Download-Problem
- Best Practices
- Browser-Kompatibilität
- Tools und Testing
- Häufige Probleme und Lösungen
Was ist eine Referrer Policy?
Die Referrer Policy ist ein Web-Standard, der kontrolliert, welche Informationen über die verweisende Seite (Referer) an andere Websites gesendet werden, wenn ein Benutzer einen Link anklickt oder eine Ressource lädt.
Warum ist das wichtig?
Sicherheit:
- Verhindert das Preisgeben sensibler URLs
- Schutz vor CSRF-Angriffen
- Kontrolle über Informationslecks
Privacy:
- Benutzer-Tracking reduzieren
- Schutz der Browsing-Geschichte
- Compliance mit Datenschutzbestimmungen (DSGVO)
Funktionalität:
- Manche Websites benötigen Referer-Informationen
- Analytics und Statistiken
- Zugriffskontrolle (wie in Ihrem Fall)
Der HTTP Referer Header
Was ist der Referer Header?
Der Referer Header (bewusst falsch geschrieben in der HTTP-Spezifikation) enthält die URL der Seite, von der aus die aktuelle Anfrage gestartet wurde.
Beispiel:
Benutzer ist auf: https://praxwert.de/downloads
Klickt auf Link zu: https://files.mgofv.de/download/datei.zip
Resultierende HTTP-Anfrage:
GET /download/datei.zip HTTP/1.1
Host: files.mgofv.de
Referer: https://praxwert.de/downloads
Wann wird der Referer gesendet?
- Beim Anklicken von Links (
<a href="">) - Beim Laden von Bildern, CSS, JavaScript
- Bei Form-Submissions
- Bei JavaScript-Navigation (window.location)
- Bei fetch() und XMLHttpRequest
Verfügbare Referrer Policies
1. no-referrer
Beschreibung: Kein Referer Header wird gesendet.
<meta name="referrer" content="no-referrer">
Resultat:
- Alle Anfragen: Kein Referer Header
- Maximaler Privacy-Schutz
- Kann Funktionalität beeinträchtigen
2. no-referrer-when-downgrade
Beschreibung: Referer wird gesendet, außer bei HTTPS → HTTP Übergängen.
<meta name="referrer" content="no-referrer-when-downgrade">
Beispiele:
- https://example.com → https://other.com ✅Referer gesendet
- https://example.com → http://other.com ❌ Kein Referer
- http://example.com → http://other.com ✅Referer gesendet
3. origin
Beschreibung: Nur die Origin (Schema + Host + Port) wird gesendet.
<meta name="referrer" content="origin">
Beispiel:
- Von:
https://praxwert.de/downloads/page.html?param=123 - Gesendet:
https://praxwert.de
4. origin-when-cross-origin
Beschreibung: Vollständige URL bei gleicher Origin, nur Origin bei Cross-Origin.
<meta name="referrer" content="origin-when-cross-origin">
Beispiele:
praxwert.de/page1→praxwert.de/page2: Vollständige URLpraxwert.de→files.mgofv.de: Nurhttps://praxwert.de
5. same-origin (Ihr Problem!)
Beschreibung: Referer nur bei gleicher Origin.
<meta name="referrer" content="same-origin">
Das war Ihr Problem:
praxwert.de→files.mgofv.de= Cross-Origin = Kein Referer- Daher konnte .htaccess den Referer nicht prüfen
6. strict-origin
Beschreibung: Nur Origin, nie bei HTTPS → HTTP.
<meta name="referrer" content="strict-origin">
Verhalten:
https://example.com/page→https://other.com=https://example.comhttps://example.com/page→http://other.com= Kein Referer
7. strict-origin-when-cross-origin (Moderner Standard)
Beschreibung: Vollständige URL bei gleicher Origin, Origin bei Cross-Origin HTTPS, kein Referer bei Downgrade.
<meta name="referrer" content="strict-origin-when-cross-origin">
Das ist der neue Standard in Chrome, Firefox, Safari!
8. unsafe-url
Beschreibung: Vollständige URL wird immer gesendet.
<meta name="referrer" content="unsafe-url">
Achtung:
- Kann sensitive Daten in URLs preisgeben
- Tracking ermöglichen
- Sollte nur bewusst eingesetzt werden
Sicherheits- und Privacy-Aspekte
Sicherheitsrisiken
Information Disclosure:
Problematisch: https://example.com/admin/secret-page?token=abc123&user=admin Mit unsafe-url Policy würde diese komplette URL als Referer gesendet!
Session Fixation:
https://banking.com/login?sessionid=xyz789 Könnte an externe Websites geleakt werden
CSRF Protection:
Viele CSRF-Schutzmaßnahmen basieren auf Referer-Prüfung:
// Typischer CSRF-Schutz
if (!str_contains($_SERVER['HTTP_REFERER'], 'mysite.com')) {
die('CSRF detected');
}
Privacy-Vorteile
Tracking-Schutz:
- Verhindert Cross-Site-Tracking
- Reduziert Fingerprinting-Möglichkeiten
- Schutz der Browsing-Geschichte
Compliance:
- DSGVO-konform
- Reduzierte Datenweitergabe
- Benutzer-Kontrolle
Implementierung
1. HTML Meta Tag (Seitenweise)
<meta name="referrer" content="strict-origin-when-cross-origin">
2. HTTP Header (Serverweise)
# Apache Header always set Referrer-Policy "strict-origin-when-cross-origin" # nginx add_header Referrer-Policy "strict-origin-when-cross-origin";
3. Link-spezifisch
<a href="https://external.com" referrerpolicy="no-referrer">External Link</a> <a href="download.zip" referrerpolicy="unsafe-url">Download</a>
4. JavaScript
// Bei fetch()
fetch('https://api.example.com', {
referrerPolicy: 'origin'
});
// Meta Tag dynamisch setzen
const meta = document.createElement('meta');
meta.name = 'referrer';
meta.content = 'strict-origin';
document.head.appendChild(meta);
5. WordPress
// functions.php
function set_referrer_policy() {
if (!is_admin()) {
echo '<meta name="referrer" content="strict-origin-when-cross-origin">';
}
}
add_action('wp_head', 'set_referrer_policy');
// Oder als HTTP Header
function add_referrer_policy_header() {
if (!is_admin()) {
header('Referrer-Policy: strict-origin-when-cross-origin');
}
}
add_action('send_headers', 'add_referrer_policy_header');
Fallstudie: Das PraxWert Download-Problem
Das Setup
- Website:
praxwert.de(WordPress Multisite) - File Server:
files.mgofv.de - Download-Link:
https://files.mgofv.de/immobilien/PraxWert_Update_Center/PraxWert_6.9.zip - Schutz: .htaccess mit Referer-Prüfung
Das Problem
# .htaccess auf files.mgofv.de
SetEnvIfNoCase Referer "^https?://([^/]*\.)?praxwert\.de" allowed_referer
<RequireAny>
Require env allowed_referer
</RequireAny>
Symptom: 403 Forbidden, auch von der Website aus
Root Cause Analysis
Browser-Einstellung: Referrer Policy: same-origin
Request: praxwert.de → files.mgofv.de (Cross-Origin)
Resultat: Kein Referer Header gesendet
Server: Kann Herkunft nicht prüfen → 403 Forbidden
Die Lösung
<!-- Auf praxwert.de/downloads --> <a href="https://files.mgofv.de/immobilien/PraxWert_Update_Center/PraxWert_6.9.zip" referrerpolicy="unsafe-url"> Download PraxWert 6.9 </a>
Warum funktioniert es jetzt?
- Browser sendet nun vollständige URL als Referer
- Apache erhält:
Referer: https://praxwert.de/downloads - .htaccess erkennt praxwert.de im Referer
- Zugriff wird gewährt
Alternative Lösungen
// Token-basiert (sicherer)
function secure_download_link($file) {
$token = wp_create_nonce('download_' . $file);
return 'https://files.mgofv.de/secure-download.php?file=' . urlencode($file) . '&token=' . $token;
Best Practices
1. Wählen Sie die richtige Policy
<!-- Für öffentliche Websites --> <meta name="referrer" content="strict-origin-when-cross-origin"> <!-- Für interne/administrative Bereiche --> <meta name="referrer" content="same-origin"> <!-- Für Analytics-wichtige Seiten --> <meta name="referrer" content="origin-when-cross-origin">
2. Link-spezifische Anpassungen
<!-- Externe Links: Privacy schützen -->
<a href="https://social-media.com" referrerpolicy="no-referrer">
Share on Social Media
</a>
<!-- Downloads: Functionality gewährleisten -->
<a href="https://cdn.example.com/file.zip" referrerpolicy="unsafe-url">
Download
</a>
<!-- Partner-Links: Tracking ermöglichen -->
<a href="https://partner.com/ref123" referrerpolicy="origin">
Partner Link
</a>
3. WordPress-spezifische Optimierungen
// Conditional Referrer Policies
function dynamic_referrer_policy() {
if (is_page('downloads')) {
echo '<meta name="referrer" content="unsafe-url">';
} elseif (is_admin()) {
echo '<meta name="referrer" content="same-origin">';
} else {
echo '<meta name="referrer" content="strict-origin-when-cross-origin">';
}
}
add_action('wp_head', 'dynamic_referrer_policy');
Browser-Kompatibilität
Desktop Browser Support
| Browser | Version | Standard Policy |
| Chrome | 85+ | strict-origin-when-cross-origin |
| Firefox | 87+ | strict-origin-when-cross-origin |
| Safari | 14+ | strict-origin-when-cross-origin |
| Edge | 85+ | |
Mobile Browser Support
| Browser | Version | Unterstützung |
| Chrome Mobile | 85+ | Vollständig |
| Safari iOS | 14+ | Vollständig |
| Samsung Internet | 14+ | Vollständig |
Tools und Testing
1. Browser Developer Tools
Chrome/Firefox:
- F12 → Network Tab
- Reload page
- Klick auf Request
- Headers Tab → Request Headers
- Suche nach „Referer“
2. Online Testing Tools
- httpbin.org/headers – Zeigt alle empfangenen Header
- whatsmyreferer.com – Referer-Testing
- securityheaders.com – Security Header Analysis
3. curl Testing
# Test ohne Referer curl -I https://files.mgofv.de/download/file.zip # Test mit Referer curl -I -H "Referer: https://praxwert.de/downloads" \ https://files.mgofv.de/download/file.zip
4. JavaScript Debugging
// Aktuellen Referer anzeigen
console.log('Current referrer:', document.referrer);
// Policy testen
function testPolicy(policy) {
const meta = document.querySelector('meta[name="referrer"]');
if (meta) {
meta.content = policy;
} else {
const newMeta = document.createElement('meta');
newMeta.name = 'referrer';
newMeta.content = policy;
document.head.appendChild(newMeta);
}
console.log('Policy set to:', policy);
}
Häufige Probleme und Lösungen
Problem 1: Downloads funktionieren nicht (Ihr Fall)
Symptom: 403 Forbidden bei Cross-Origin Downloads
<!-- Lösung: Policy für Downloads anpassen --> <a href="https://cdn.example.com/file.zip" referrerpolicy="unsafe-url">Download</a>
Problem 2: Analytics-Daten fehlen
Symptom: Referrer-Daten in Google Analytics leer
<!-- Lösung: Origin senden --> <meta name="referrer" content="origin-when-cross-origin">
Problem 3: Social Media Sharing
Symptom: Social Media kann keine Vorschau generieren
<!-- Lösung: Spezifische Links -->
<a href="https://facebook.com/share" referrerpolicy="unsafe-url">
Share on Facebook
</a>
Problem 4: CSRF-Schutz schlägt fehl
// Problem: Kein Referer für CSRF-Prüfung
if (empty($_SERVER['HTTP_REFERER'])) {
// Fallback-Mechanismus implementieren
if (!wp_verify_nonce($_POST['nonce'], 'action_name')) {
wp_die('CSRF Error');
}
}
Fazit
Referrer Policies sind ein mächtiges Tool für:
- Sicherheit: Schutz vor Information Disclosure
- Privacy: Reduzierung von Cross-Site-Tracking
- Funktionalität: Kontrolle über Referer-Informationen
Empfohlene Standard-Policy:
<meta name="referrer" content="strict-origin-when-cross-origin">
Für spezielle Anwendungsfälle (wie Ihren Download-Schutz):
<a href="protected-resource" referrerpolicy="unsafe-url">Protected Link</a>
Das Verständnis von Referrer Policies hilft dabei, die Balance zwischen Sicherheit, Privacy und Funktionalität zu finden. In Ihrem Fall war die same-origin Policy zu restriktiv für Cross-Origin-Downloads, weshalb eine gezielte Anpassung auf unsafe-url für die Download-Links die optimale Lösung war.
Bildquelle: krungchingpixs – stock.adobe.com