Referrer-Policy in Contao konfigurieren

Referrer-Policy in Contao aktivieren — per Symfony EventSubscriber oder .htaccess. Mit Prioritätssteuerung, Verifizierung und häufigen Fehlern.

Contao · Schritt für Schritt

Referrer-Policy in Contao

Referrer-Policy kontrolliert, welche Referrer-Informationen der Browser bei Navigation und Ressourcen-Anfragen mitsendet. Ohne Policy sendet der Browser die vollständige URL — inklusive Query-Parameter mit Session-Tokens, Suchbegriffen oder internen Pfaden — an Drittanbieter-Server. Mit 10 von 166 Punkten im Wolf-Agents Web Security Check ist dieser Header besonders für den Datenschutz relevant.

In Contao setzen Sie Referrer-Policy über einen Symfony EventSubscriber oder die public/.htaccess. Der empfohlene Wert ist strict-origin-when-cross-origin — ein Kompromiss zwischen Datenschutz und Funktionalität. Bei Cross-Origin-Requests wird nur die Origin (Domain) gesendet, bei Same-Origin die volle URL. Für maximalen Datenschutz verwenden Sie no-referrer, allerdings bricht dies Affiliate-Tracking und einige Analytics-Referrer.

Der Wolf-Agents Web Security Check prüft Ihren Referrer-Policy-Header und vergibt bis zu 10 Punkte. Werte wie no-referrer oder strict-origin-when-cross-origin erhalten die volle Punktzahl, während unsafe-url oder fehlende Policy zu Abzügen führen.

Referrer-Policy-Implementierung in Contao

Der EventSubscriber ist der empfohlene Weg — er arbeitet unabhängig vom Webserver, überlebt Contao-Updates und wird durch Symfonys Dependency-Injection automatisch registriert. Achten Sie auf die Subscriber-Priorität: Contao-Extensions (wie Analytics- oder Marketing-Bundles) können eigene Referrer-Policies setzen. Eine negative Priorität stellt sicher, dass Ihr Subscriber nach dem Contao-Core, aber vor Extensions ausgeführt wird.

EventSubscriber (empfohlen)
src/EventSubscriber/ReferrerPolicySubscriber.php Empfohlen
<?php
// src/EventSubscriber/ReferrerPolicySubscriber.php
namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class ReferrerPolicySubscriber implements EventSubscriberInterface {
  public static function getSubscribedEvents(): array {
    // Priorität -10: nach Contao-Core, vor Extension-Subscribern
    return [KernelEvents::RESPONSE => ['onResponse', -10]];
  }

  public function onResponse(ResponseEvent $event): void {
    if (!$event->isMainRequest()) {
      return;
    }

    $response = $event->getResponse();
    $response->headers->set(
      'Referrer-Policy',
      'strict-origin-when-cross-origin'
    );
  }
}

Auf Shared Hosting ohne Composer-Zugriff nutzen Sie die .htaccess als Fallback. Wichtig: Verwenden Sie nur einen der beiden Wege, nicht beide gleichzeitig — sonst kann der Header doppelt gesetzt werden.

.htaccess Fallback
public/.htaccess Fallback
# public/.htaccess — Referrer-Policy
<IfModule mod_headers.c>
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

# Werte-Optionen (von streng nach liberal):
# no-referrer                      — kein Referrer (bricht Affiliate-Links)
# strict-origin-when-cross-origin  — empfohlen (guter Kompromiss)
# same-origin                      — Referrer nur bei Same-Origin
# no-referrer-when-downgrade       — Browser-Default
Cache leeren nicht vergessen

Nach jeder Änderung am EventSubscriber: vendor/bin/contao-console cache:clear --env=prod

Verifizierung

Nach der Konfiguration prüfen Sie den Header per curl auf verschiedenen Seitentypen. Achten Sie besonders darauf, dass der Header genau einmal erscheint — doppelte Header (durch .htaccess und EventSubscriber gleichzeitig) können zu inkonsistentem Browser-Verhalten führen.

Terminal Verifizierung
# 1. Cache leeren
vendor/bin/contao-console cache:clear --env=prod

# 2. Header prüfen
curl -sI https://ihre-domain.de | grep -i referrer-policy

# Erwartete Ausgabe:
# referrer-policy: strict-origin-when-cross-origin

# 3. Verschiedene Seitentypen testen
curl -sI https://ihre-domain.de/news.html | grep -i referrer-policy
curl -sI https://ihre-domain.de/kontakt.html | grep -i referrer-policy

# 4. Prüfen ob Header doppelt gesetzt wird
curl -sI https://ihre-domain.de | grep -ci referrer-policy
# 1 (muss 1 sein, nicht 2)

# 5. Wolf-Agents Web Security Check: Referrer-Policy (10 Punkte)

Testen Sie auch das Verhalten in den Browser DevTools: Navigieren Sie von Ihrer Contao-Seite zu einer externen URL und prüfen Sie im Network-Tab, welcher Referrer-Header gesendet wird. Bei strict-origin-when-cross-origin sollte nur die Domain erscheinen.

Häufige Fehler bei Referrer-Policy in Contao

contao-console cache:clear vergessen

Änderungen am EventSubscriber werden erst nach vendor/bin/contao-console cache:clear --env=prod wirksam. Symfony cached Service-Definitionen — ohne Cache-Invalidierung wird der alte (oder gar kein) Subscriber verwendet.

Contao-Extension überschreibt Referrer-Policy

Analytics- oder Marketing-Extensions können eine lockerere Referrer-Policy setzen. Prüfen Sie die Subscriber-Priorität mit vendor/bin/contao-console debug:event-dispatcher kernel.response und passen Sie die Priorität an, damit Ihr Subscriber zuletzt ausgeführt wird.

no-referrer bricht Affiliate-Tracking

no-referrer entfernt alle Referrer-Informationen — Affiliate-Programme und Analytics-Tools erhalten keine Herkunftsinformationen mehr. Nutzen Sie strict-origin-when-cross-origin als Kompromiss, der die Domain sendet aber den vollständigen Pfad verbirgt.

Doppelter Header durch .htaccess und EventSubscriber

Wenn sowohl .htaccess als auch der EventSubscriber den Header setzen, erscheint der Wert doppelt. Nutzen Sie nur einen der beiden Wege. Prüfen Sie mit curl -sI | grep -ci referrer-policy ob der Header mehrfach vorkommt.

Compliance-Relevanz

Die Referrer-Policy ist ein direkter Datenschutz-Mechanismus. Ohne diesen Header können interne URLs, Suchbegriffe und Session-Parameter an externe Dienste übermittelt werden. Besonders bei Contao-Seiten mit internen Bereichen oder E-Commerce-Funktionen ist die Kontrolle des Referrer-Headers essentiell.

NIS2Art. 21(e) — Sicherheit bei Erwerb, Entwicklung und Wartung von Informationssystemen
DSGVOArt. 5(1)(c) — Datenminimierung, Art. 32 — Technische Maßnahmen zum Schutz personenbezogener Daten
BSIAPP.3.1 — Webserver-Absicherung mit Security Headern, Kontrolle der Referrer-Übermittlung
ePrivacySchutz der Kommunikationsmetadaten bei Cross-Origin-Navigationen und Drittanbieter-Requests

Wie steht Ihre Domain bei Referrer-Policy?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.