Clear-Site-Data in Spring Boot
Browser-Daten beim Logout sicher loeschen -- mit LogoutHandler-Integration, selektiver Bereinigung und Spring Security Logout-Kette.
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.
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.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"");
}
}
}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.
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
@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();
}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 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",
""*"");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.
# 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.
Wie steht Ihre Domain bei Clear-Site-Data?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.