Clear-Site-Data für Express.js
Clear-Site-Data auf dem POST /logout Endpoint einrichten — mit session.destroy(), clearCookie() als Fallback und Redirect zur Login-Seite.
Clear-Site-Data in Express.js
Express.js setzt Clear-Site-Data direkt in der Logout-Route über res.set(). Der Vorteil gegenüber Webserver-Konfigurationen: Sie können im gleichen Handler die Session serverseitig zerstören, den Cookie löschen und den Clear-Site-Data Header setzen — alles in einer einzigen Route-Funktion.
Clear-Site-Data bringt 3 von 166 Punkten im Wolf-Agents Web Security Check. In Express.js ist die Implementierung eine einzelne Route mit 10 Zeilen Code — session.destroy(), res.set(), clearCookie() und redirect().
POST /logout Route erstellen
Die Logout-Route zerstört die Session serverseitig, setzt den Clear-Site-Data Header und löscht den Session-Cookie als Fallback für ältere Browser.
// POST /logout — Sicherer Logout mit Clear-Site-Data
app.post('/logout', (req, res) => {
// 1. Session serverseitig zerstören
if (req.session) {
req.session.destroy((err) => {
if (err) {
console.error('Session destroy error:', err);
}
});
}
// 2. Clear-Site-Data Header setzen
res.set('Clear-Site-Data', '"cache", "cookies", "storage"');
// 3. Session-Cookie explizit löschen (Fallback)
res.clearCookie('sessionId', {
path: '/',
httpOnly: true,
secure: true,
sameSite: 'lax',
});
// 4. Redirect zur Login-Seite
res.redirect('/login');
}); Die Optionen in clearCookie() (path, httpOnly, secure, sameSite) müssen exakt mit den Optionen übereinstimmen, die beim Setzen des Cookies verwendet wurden. Andernfalls erkennt der Browser den Cookie nicht und löscht ihn nicht.
GET-Variante für Logout-Links
Wenn Sie GET-basierte Logout-Links benötigen (z.B. in E-Mails oder Navigationsmenüs), können Sie zusätzlich eine GET-Route erstellen. Bevorzugen Sie POST — GET-Logout-Endpoints sind anfällig für CSRF.
<img src="/logout"> auslösen und Nutzer ungewollt ausloggen. Verwenden Sie POST mit einem CSRF-Token für maximale Sicherheit. Header testen
Starten Sie den Express-Server und testen Sie den Logout-Endpoint. Prüfen Sie, ob der Clear-Site-Data Header korrekt in der Response gesetzt wird.
curl -X POST -I http://localhost:3000/logout | grep -i clear localStorage.setItem('test', '1'), senden Sie den Logout-Request und prüfen Sie mit localStorage.getItem('test') — der Wert sollte null sein. Wie steht Ihre Domain bei Clear-Site-Data?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.
Häufig gestellte Fragen
Warum sollte ich POST statt GET für den Logout-Endpoint verwenden?
GET-Requests können durch img-Tags, Links oder Prefetching automatisch ausgelöst werden — ein Angreifer könnte Nutzer ungewollt per CSRF ausloggen. POST erfordert ein explizites Formular oder fetch-Aufruf. Der Clear-Site-Data Header funktioniert mit beiden Methoden, aber POST ist sicherer.
Brauche ich clearCookie() zusätzlich zu Clear-Site-Data?
Ja, als Fallback. Clear-Site-Data wird von ca. 94% der Browser unterstützt, aber nicht von allen. clearCookie() stellt sicher, dass der Session-Cookie auch in älteren Browsern gelöscht wird. Beide Methoden zusammen bieten vollständige Abdeckung.
Funktioniert Clear-Site-Data mit express-session?
Ja. Rufen Sie zuerst req.session.destroy() auf, um die Session serverseitig zu invalidieren. Setzen Sie dann den Clear-Site-Data Header, der alle clientseitigen Daten löscht — inklusive des Session-Cookies, der von express-session gesetzt wurde.
Kann ich Clear-Site-Data als Express-Middleware setzen?
Technisch ja, aber dringend vermeiden. Als globale Middleware würde der Header auf jeder Response gesetzt und die Session bei jedem Request zerstören. Setzen Sie den Header ausschließlich in der Logout-Route — niemals als app.use()-Middleware.
Wie kombiniere ich Clear-Site-Data mit Passport.js?
Rufen Sie req.logout() von Passport.js auf, zerstören Sie die Session mit req.session.destroy(), und setzen Sie dann den Clear-Site-Data Header. Passport.js kümmert sich um die serverseitige Session-Invalidierung, Clear-Site-Data um die clientseitige Bereinigung.