Referrer Policy

Januar 28, 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

Article by Your Name

Pretium lorem primis lectus donec tortor fusce morbi risus curae. Dignissim lacus massa mauris enim mattis magnis senectus montes mollis taciti accumsan semper nullam dapibus netus blandit nibh aliquam metus morbi cras magna vivamus per risus.

Probleme mit Hardware?

Der Helpdesk in Bamberg unterstützt dich

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