Clear-Site-Data für Shopware 6

Browser-Daten beim Logout automatisch löschen — EventSubscriber auf der customer.logout Route für maximale Session-Sicherheit.

Shopware · Schritt für Schritt

Clear-Site-Data in Shopware 6

Clear-Site-Data weist den Browser an, gespeicherte Daten (Cookies, Cache, Storage) zu löschen. Der Header ist besonders beim Logout relevant: Er stellt sicher, dass nach dem Abmelden keine sensiblen Kundendaten im Browser verbleiben — keine Session-Tokens, keine gespeicherten Warenkorbdaten und keine gecachten Account-Seiten. Clear-Site-Data ist mit 3 von 166 Punkten im Wolf-Agents Web Security Check bewertet.

In Shopware 6 setzen Sie den Header über einen EventSubscriber, der auf das kernel.response-Event reagiert. Die zentrale Regel: Der Header wird ausschließlich auf der Logout-Route (frontend.account.logout) gesetzt. Auf normalen Seitenaufrufen würde der Header den Warenkorb, die Login-Session und alle gespeicherten Kundendaten löschen — ein Desaster für jeden E-Commerce-Shop.

Für Shopware-Shops mit sensiblen Kundendaten (Bestellhistorie, gespeicherte Zahlungsmethoden, Adressen) ist Clear-Site-Data eine wichtige Ergänzung zur serverseitigen Session-Invalidierung. Selbst wenn die Session auf dem Server beendet wird, können ohne Clear-Site-Data noch Daten im Browser-Cache liegen — besonders problematisch auf gemeinsam genutzten Geräten. Der Wolf-Agents Web Security Scanner prüft, ob der Header auf der Logout-Response gesetzt ist.

Implementierung

Variante A (empfohlen): Vollständiger EventSubscriber mit Route-Check und Cache-Control. Variante B: Nginx Location-Block für Logout-URL als Alternative oder Ergänzung.

Variante A — EventSubscriber
SecurityHeaderSubscriber.phpEmpfohlen
// src/Subscriber/SecurityHeaderSubscriber.php
namespace App\Subscriber;

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

class SecurityHeaderSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            KernelEvents::RESPONSE => 'onResponse',
        ];
    }

    public function onResponse(ResponseEvent $event): void
    {
        $request = $event->getRequest();
        $response = $event->getResponse();
        $route = $request->attributes->get('_route');

        // NUR auf der Logout-Route!
        if ($route === 'frontend.account.logout') {
            $response->headers->set(
                'Clear-Site-Data',
                '"cache", "cookies", "storage"'
            );
            // Logout darf nie gecacht werden
            $response->headers->set(
                'Cache-Control',
                'no-store, no-cache, must-revalidate, private'
            );
        }
    }
}
Variante B — Nginx
nginx.confServer-Level
# Nginx — Alternative (nur für Logout-URL)
# Vorteil: funktioniert auch bei Shopware Cloud

location = /account/logout {
    # Clear-Site-Data nur auf Logout
    add_header Clear-Site-Data '"cache", "cookies", "storage"' always;

    # Logout-Response darf nie gecacht werden
    add_header Cache-Control "no-store, no-cache, must-revalidate, private" always;

    # Weiterleitung an Shopware
    proxy_pass http://127.0.0.1:8000;
    # ... weitere Proxy-Konfiguration
}
Warum NUR auf der Logout-Route?

Clear-Site-Data löscht alle Daten des Browsers für Ihre Domain. Auf einer normalen Produktseite würde das bedeuten: Warenkorb weg, Login-Session weg, Wunschliste weg, gespeicherte Spracheinstellungen weg. In Shopware ist die Logout-Route frontend.account.logout. Prüfen Sie den Route-Namen exakt — ein Tippfehler führt dazu, dass der Header nie oder auf allen Seiten gesetzt wird.

Verifizierung

Die Verifizierung von Clear-Site-Data erfordert einen manuellen Browser-Test, da der Header nur auf der Logout-Response erscheint. Prüfen Sie drei Aspekte: Header auf Logout vorhanden, kein Header auf normalen Seiten, Browser-Storage nach Logout leer.

Terminal / DevToolsVerifizierung
# 1. Shopware-Cache leeren
bin/console cache:clear

# 2. In der Browser DevTools prüfen:
# → Network-Tab öffnen
# → Im Shop einloggen, dann ausloggen
# → Logout-Request anklicken
# → Response Headers prüfen:
#   Clear-Site-Data: "cache", "cookies", "storage"
#   Cache-Control: no-store, no-cache, must-revalidate, private

# 3. Prüfen ob normaler Seitenaufruf KEINEN Clear-Site-Data hat
curl -sI https://ihr-shop.de/ | grep -i clear-site-data
# Erwartete Ausgabe: (leer — kein Header auf normalen Seiten)

# 4. Nach Logout: Application-Tab in DevTools
# → Cookies, Local Storage, Session Storage sollten leer sein
Tipp: Testen Sie auch das Szenario, in dem ein Benutzer sich einloggt, Produkte in den Warenkorb legt und dann ausloggt. Nach dem Logout sollten Warenkorb und Account-Daten im Browser-Storage leer sein.

Häufige Fehler

Clear-Site-Data auf allen Seiten gesetzt

Der häufigste und schwerwiegendste Fehler: Wenn der Header auf jeder Response gesetzt wird, löscht er Warenkorb und Login bei jedem Seitenaufruf. Kunden können sich nicht einloggen und keine Bestellungen aufgeben. Prüfen Sie die Route-Bedingung exakt: nur frontend.account.logout.

Safari unterstützt Clear-Site-Data nicht

Safari (macOS und iOS) ignoriert den Clear-Site-Data Header vollständig. Implementieren Sie zusätzlich serverseitige Session-Invalidierung über Shopware's CustomerLogoutEvent und setzen Sie Cookie-Expires manuell auf ein vergangenes Datum als Fallback.

HTTP Cache cached Logout-Response

Shopware's HTTP Cache kann die Logout-Response cachen und den Clear-Site-Data Header für nachfolgende Requests ausliefern — ein katastrophaler Fehler. Setzen Sie immer Cache-Control: no-store zusammen mit Clear-Site-Data. Prüfen Sie auch die Varnish-Konfiguration falls vorhanden.

EventSubscriber-Priorität zu niedrig

Wenn andere Shopware-Plugins oder der HTTP Cache den Response vor Ihrem Subscriber verarbeiten, kann der Header überschrieben oder entfernt werden. Setzen Sie eine hohe Priorität: KernelEvents::RESPONSE => ['onResponse', -10] (negativer Wert = wird später ausgeführt, nach dem Cache).

Compliance-Relevanz

DSGVO Art. 17 — Recht auf Löschung: Browser-Daten beim Logout zu entfernen unterstützt das Recht auf Vergessenwerden. Besonders relevant für gemeinsam genutzte Geräte in Büros oder Haushalten.
PCI DSS 4.0 Requirement 6.2.4 — Sichere Session-Beendigung bei Logout. Zahlungsdaten und Session-Tokens müssen nach dem Logout vollständig entfernt werden — sowohl serverseitig als auch im Browser.
NIS2 Art. 21(e) — Sicheres Session-Management als Teil der Cybersicherheits-Risikomanagementmaßnahmen. Clear-Site-Data ergänzt die serverseitige Session-Invalidierung.
OWASP ASVS V3.3 — Session Logout: Alle Session-Daten müssen bei Logout invalidiert werden. Clear-Site-Data ist der browserbasierte Mechanismus dafür.

Wie steht Ihre Domain bei Clear-Site-Data?

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