Clear-Site-Data in Drupal konfigurieren

Browser-Daten beim Logout sicher löschen — EventSubscriber auf der user.logout-Route für Cache, Cookies und Storage.

Drupal · Schritt für Schritt

Clear-Site-Data in Drupal

Clear-Site-Data weist den Browser an, gespeicherte Daten zu löschen: Cache, Cookies, localStorage und sessionStorage. Der Header wird typischerweise nur beim Logout gesetzt, um sicherzustellen, dass nach dem Abmelden keine sensiblen Daten im Browser verbleiben. Im Wolf-Agents Web Security Check bringt er 3 von 166 Punkten.

seckit unterstützt Clear-Site-Data nicht. Sie benötigen einen Custom EventSubscriber, der den Header nur auf der user.logout-Route setzt. Auf allen anderen Seiten darf dieser Header nicht gesetzt werden — er würde den gesamten Browser-Cache löschen.

Der Wolf-Agents Web Security Check erkennt automatisch, ob Clear-Site-Data auf der Logout-Route gesetzt wird. Da der Header nur bei bestimmten Aktionen relevant ist, prüft der Scanner die Gesamtkonfiguration im Kontext aller Security Headers.

Implementierung per EventSubscriber

Der EventSubscriber prüft die aktuelle Route und setzt den Header nur beim Logout.

EventSubscriber
ClearSiteDataSubscriber.phpEmpfohlen
<?php
// modules/custom/security_headers/src/EventSubscriber/ClearSiteDataSubscriber.php

namespace Drupal\security_headers\EventSubscriber;

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

class ClearSiteDataSubscriber implements EventSubscriberInterface {

  public static function getSubscribedEvents() {
    return [KernelEvents::RESPONSE => ['onResponse', 0]];
  }

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

    // NUR auf der Logout-Route setzen!
    if ($route === 'user.logout' ||
        $route === 'user.logout.confirm') {
      $response = $event->getResponse();
      $response->headers->set(
        'Clear-Site-Data',
        '"cache", "cookies", "storage"'
      );
    }
  }
}
Mehrere Logout-Routen prüfen

Drupal kann je nach Konfiguration zusätzliche Logout-Routen haben — z.B. durch Contrib-Module wie simplesamlphp_auth oder openid_connect. Prüfen Sie mit drush route:list | grep logout alle relevanten Routen und erweitern Sie die Bedingung im EventSubscriber entsprechend.

Verifizierung

Führen Sie einen Logout durch und prüfen Sie den Response-Header im Network-Tab der DevTools. Öffnen Sie die DevTools vor dem Logout und filtern Sie im Network-Tab nach der Logout-URL. Der Clear-Site-Data-Header muss in der Response erscheinen. Prüfen Sie anschließend im Application-Tab, ob Cookies und Storage tatsächlich geleert wurden.

Browser DevToolsVerifizierung
drush cr

# Logout durchführen und in Browser DevTools prüfen:
# Network Tab → Logout-Request → Response Headers

# Erwartete Ausgabe (nur bei Logout!):
# clear-site-data: "cache", "cookies", "storage"

Häufige Fehler

Clear-Site-Data erfordert besondere Sorgfalt bei der Route-Erkennung — ein falsch platzierter Header kann die Website unbenutzbar machen.

Clear-Site-Data auf allen Seiten

Wenn der Header auf jeder Seite gesetzt wird, löscht der Browser bei jedem Seitenaufruf den Cache. Die Website wird extrem langsam. Setzen Sie den Header nur auf der Logout-Route.

Route-Name falsch

Der Route-Name user.logout muss exakt stimmen. Prüfen Sie mit drush route:list | grep logout die korrekten Routen-Namen in Ihrer Installation.

Header nur über HTTPS wirksam

Browser ignorieren Clear-Site-Data auf HTTP-Verbindungen. Stellen Sie sicher, dass Ihre Logout-Seite über HTTPS ausgeliefert wird.

EventSubscriber-Priorität zu niedrig

Wenn Drupals Redirect-Subscriber den Logout-Redirect vor Ihrem Subscriber ausführt, wird der Header nicht gesetzt. Erhöhen Sie die Priorität Ihres Subscribers auf 100 oder höher.

Compliance-Relevanz

Clear-Site-Data unterstützt das technische Recht auf Löschung und stellt sicher, dass nach dem Abmelden keine sensiblen Daten im Browser verbleiben.

DSGVOArt. 17 — Recht auf Löschung: Browser-Daten beim Logout entfernen
NIS2Art. 21(e) — Sicherheit bei Wartung von Informationssystemen

Zusammenfassung

Clear-Site-Data in Drupal wird ausschließlich per EventSubscriber auf der user.logout-Route gesetzt. Setzen Sie den Header niemals auf allen Seiten. Prüfen Sie mit drush route:list | grep logout alle Logout-Routen und erhöhen Sie die EventSubscriber-Priorität, damit der Header vor dem Redirect gesetzt wird.

Wie steht Ihre Domain bei Clear-Site-Data?

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