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.
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.
// 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'
);
}
}
} # 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
} 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.
# 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 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
Wie steht Ihre Domain bei Clear-Site-Data?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.