Referrer Policy

28.01.2026

 Inhaltsverzeichnis

  1. Was ist eine Referrer Policy?
  2. Der HTTP Referer Header
  3. Verfügbare Referrer Policies
  4. Sicherheits- und Privacy-Aspekte
  5. Implementierung
  6. Fallstudie: Das PraxWert Download-Problem
  7. Best Practices
  8. Browser-Kompatibilität
  9. Tools und Testing
  10. 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:

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 URL
  • praxwert.de → files.mgofv.de: Nur https://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.com
  • https://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?

  1. Browser sendet nun vollständige URL als Referer
  2. Apache erhält: Referer: https://praxwert.de/downloads
  3. .htaccess erkennt praxwert.de im Referer
  4. 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

BrowserVersionStandard Policy
Chrome85+strict-origin-when-cross-origin
Firefox
87+
strict-origin-when-cross-origin
Safari14+strict-origin-when-cross-origin
Edge
85+

strict-origin-when-cross-origin

Mobile Browser Support

BrowserVersionUnterstützung
Chrome Mobile85+Vollständig
Safari iOS14+Vollständig
Samsung Internet14+Vollständig

Tools und Testing

1. Browser Developer Tools

Chrome/Firefox:

  1. F12 → Network Tab
  2. Reload page
  3. Klick auf Request
  4. Headers Tab → Request Headers
  5. 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

Probleme mit Hardware?

Der Helpdesk in Bamberg unterstützt dich

schnell und kompetent bei Störungen,
Defekten oder Fragen rund um deine
Arbeitsausstattung.