Clear-Site-Data in Spring Boot

Browser-Daten beim Logout sicher loeschen -- mit LogoutHandler-Integration, selektiver Bereinigung und Spring Security Logout-Kette.

Spring Boot · Schritt für Schritt

Clear-Site-Data in Spring Boot

Clear-Site-Data weist den Browser an, Cache, Cookies, Storage oder alle Daten einer Website zu loeschen. Der Header wird typischerweise beim Logout gesetzt, um sicherzustellen, dass keine sensiblen Daten im Browser zurückbleiben. Er ist mit 3 von 166 Punkten im Wolf-Agents Web Security Check bewertet.

Spring Security bietet keinen eingebauten Support für Clear-Site-Data. Die eleganteste Loesung ist ein LogoutHandler, der den Header auf der Logout-Response setzt. Alternativ können Sie einen OncePerRequestFilter verwenden, der den Header nur auf /logout-Requests setzt.

1Schritt 1 von 3

Clear-Site-Data per Filter setzen

Der einfachste Ansatz ist ein OncePerRequestFilter, der den Clear-Site-Data-Header nur auf Logout-Requests setzt. Der Header darf nicht auf allen Responses stehen -- sonst wuerden bei jedem Request alle Browser-Daten geloescht.

ClearSiteDataFilter.javaProduktiv
// ClearSiteDataFilter.java
package com.example.filter;

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.stereotype.Component;

@Component
public class ClearSiteDataFilter
        extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(
            HttpServletRequest request,
            HttpServletResponse response,
            FilterChain filterChain) throws Exception {

        filterChain.doFilter(request, response);

        // Nur auf Logout-Requests setzen
        if (request.getRequestURI().equals("/logout")
                && request.getMethod().equals("POST")) {
            response.setHeader(
                "Clear-Site-Data",
                ""cache", "cookies", "storage"");
        }
    }
}
Nur über HTTPS

Der Clear-Site-Data-Header wird von Browsern nur über HTTPS-Verbindungen verarbeitet. Über HTTP wird er ignoriert. Stellen Sie sicher, dass Ihre Logout-URL über HTTPS erreichbar ist.

2Schritt 2 von 3

Spring Security LogoutHandler

Die elegantere Loesung ist ein LogoutHandler, der direkt in Spring Securitys Logout-Kette integriert wird. So wird der Header automatisch gesetzt, wenn Spring Security den Logout verarbeitet -- zusammen mit Session-Invalidierung und Cookie-Loeschung.

ClearSiteDataLogoutHandler.java + SecurityConfig.javaProduktiv
// ClearSiteDataLogoutHandler.java
@Component
public class ClearSiteDataLogoutHandler
        implements LogoutHandler {

    @Override
    public void logout(
            HttpServletRequest request,
            HttpServletResponse response,
            Authentication authentication) {
        response.setHeader(
            "Clear-Site-Data",
            ""cache", "cookies", "storage"");
    }
}

// SecurityConfig.java -- LogoutHandler registrieren
@Bean
public SecurityFilterChain securityFilterChain(
        HttpSecurity http,
        ClearSiteDataLogoutHandler clearSiteData)
        throws Exception {
    http.logout(logout -> logout
        .logoutUrl("/logout")
        .addLogoutHandler(clearSiteData)
        .logoutSuccessUrl("/login?logout")
        .invalidateHttpSession(true)
        .deleteCookies("JSESSIONID"));
    return http.build();
}
Der Wolf-Agents Web Security Check prüft den Clear-Site-Data-Header und bewertet ihn mit bis zu 3 Punkten.
3Schritt 3 von 3

Selektive Datenbereinigung

Clear-Site-Data unterstuetzt verschiedene Direktiven: "cache", "cookies", "storage", "executionContexts" und "*". Waehlen Sie die Direktiven je nach Szenario -- beim normalen Logout reichen Cache, Cookies und Storage. Bei einem Sicherheitsvorfall verwenden Sie "*" für alles.

Selektive DirektivenOptionen
// Selektive Datenbereinigung

// Nur Cache leeren (z.B. nach Deployment)
response.setHeader("Clear-Site-Data",
    ""cache"");

// Nur Cookies (z.B. bei Session-Kompromittierung)
response.setHeader("Clear-Site-Data",
    ""cookies"");

// Alles (Logout oder Sicherheitsvorfall)
response.setHeader("Clear-Site-Data",
    ""cache", "cookies", "storage", "executionContexts"");

// Wildcard: Alles loeschen
response.setHeader("Clear-Site-Data",
    ""*"");
4Verifizierung

Header verifizieren

Prüfen Sie den Clear-Site-Data-Header auf der Logout-Response. Beachten Sie, dass der Logout-Endpoint ein POST-Request mit CSRF-Token erwartet.

TerminalVerifizierung
# Clear-Site-Data auf Logout pruefen
curl -sI -X POST http://localhost:8080/logout \
  -H "Cookie: JSESSIONID=abc123" \
  -H "X-CSRF-TOKEN: ..." | grep -i clear-site-data

# Erwartete Ausgabe:
clear-site-data: "cache", "cookies", "storage"

Häufige Fehler bei Clear-Site-Data in Spring Boot

Header auf allen Responses gesetzt

Clear-Site-Data auf jeder Response loescht bei jedem Seitenaufruf alle Browser-Daten. Setzen Sie den Header ausschliesslich auf Logout-Responses oder bei Sicherheitsvorfaellen.

LogoutHandler-Reihenfolge falsch

Wenn ClearSiteDataLogoutHandler nach SecurityContextLogoutHandler laeuft, ist die Session bereits invalidiert. Der Header wird trotzdem korrekt gesetzt, aber die Reihenfolge kann bei Custom-Logik relevant sein.

Clear-Site-Data funktioniert nicht über HTTP

Browser ignorieren den Header über HTTP-Verbindungen. In der lokalen Entwicklung funktioniert der Header nur über https://localhost. Testen Sie mit einem TLS-Zertifikat oder auf dem Staging-Server.

Direktiven-Werte ohne Anfuehrungszeichen

Die Werte müssen in doppelten Anfuehrungszeichen stehen: "cache" nicht cache. Ohne Anfuehrungszeichen wird der Header-Wert vom Browser nicht erkannt und ignoriert.

Compliance-Relevanz

Clear-Site-Data stellt sicher, dass nach dem Logout keine sensiblen Daten im Browser verbleiben.

PCI DSS 4.0 -- Requirement 6.5.10 fordert, dass sensible Daten nach Session-Ende nicht im Browser verbleiben.
NIS2 -- Art. 21(e) fordert sichere Session-Verwaltung inklusive vollständigem Logout.
OWASP ASVS -- V3.3.1 fordert, dass nach dem Logout alle Session-Daten serverseitig und clientseitig geloescht werden.

Wie steht Ihre Domain bei Clear-Site-Data?

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