privacy
Sichere Cookie-Attribute
MetricSpot prüft Set-Cookie-Header auf Secure, HttpOnly und SameSite. Fehlt eines davon, vergrößert sich die Angriffsfläche für Cookie-Diebstahl und CSRF.
Was diese Prüfung macht
Liest jeden Set-Cookie-Response-Header und prüft auf drei Flags:
Secure- Cookie nur über HTTPS gesendet.HttpOnly- Cookie aus JavaScript nicht lesbar (blockiert XSS-getriebenen Diebstahl).SameSite=Lax|Strict|None- Verhalten bei seitenübergreifenden Anfragen (blockiert CSRF).
Sie besteht, wenn jedes Cookie, das Authentifizierungs- oder Session-State trägt, alle drei hat.
Warum es zählt
Cookies halten die Schlüssel zu den Sessions deiner Nutzer:innen. Ein Cookie ohne diese Flags ist eine XSS-Schwachstelle oder ein feindliches WLAN entfernt von der Account-Übernahme:
- Kein
Secure→ Cookie reist über reines HTTP bei der ersten Anfrage, bevor HSTS greift. Im Café-WLAN abhörbar. - Kein
HttpOnly→ jedes injizierte Skript (XSS, bösartige npm-Abhängigkeit, feindliche Anzeige) kann das Cookie überdocument.cookielesen und exfiltrieren. - Kein
SameSite→ Cross-Site Request Forgery (CSRF). Eine bösartige Seite kann Formulare senden oder Anfragen als deine eingeloggte:r Nutzer:in auslösen.
Browser haben ihre Defaults verschärft: Chrome liefert mittlerweile SameSite=Lax als Standard, aber Legacy-Code, der Cookies explizit ohne Flags setzt, leakt weiterhin.
So behebst du es
Setze jedes Session-/Auth-Cookie mit allen drei Flags.
Set-Cookie: session=abc123; Path=/; Secure; HttpOnly; SameSite=Lax; Max-Age=86400
Express / Node.js:
res.cookie("session", token, {
httpOnly: true,
secure: true,
sameSite: "lax",
maxAge: 86400 * 1000,
path: "/",
});
Next.js (App Router mit cookies()):
import { cookies } from "next/headers";
cookies().set({
name: "session",
value: token,
httpOnly: true,
secure: true,
sameSite: "lax",
path: "/",
maxAge: 86400,
});
Bun.serve():
return new Response("ok", {
headers: {
"Set-Cookie": `session=${token}; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=86400`,
},
});
Django:
# settings.py
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = "Lax"
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True
CSRF_COOKIE_SAMESITE = "Lax"
Rails:
# config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store,
key: "_app_session",
secure: Rails.env.production?,
httponly: true,
same_site: :lax
PHP / WordPress: in wp-config.php oder vor jeder Ausgabe:
ini_set('session.cookie_secure', '1');
ini_set('session.cookie_httponly', '1');
ini_set('session.cookie_samesite', 'Lax');
Welcher SameSite-Wert?
Strict- Cookie wird nie bei seitenübergreifenden Anfragen gesendet. Maximaler Schutz, bricht aber den Fall, dass Nutzer:innen einem Link auf deine Seite folgen und ausgeloggt ankommen. Gut für hochsensible Flows (Admin, Banking).Lax(Default) - Cookie wird bei Top-Level-Navigationen (Klick auf Link) gesendet, aber nicht bei seitenübergreifenden POSTs, iframes oder Bildanfragen. Der richtige Default für die meisten Seiten.None- Cookie wird bei allen seitenübergreifenden Anfragen gesendet. ErfordertSecure. Nur wenn du wirklich Drittanbieter-Kontext brauchst (eingebettete Widgets, Identity-Provider).
Cookie-Name-Präfixe fügen eine zweite Durchsetzungsebene hinzu:
__Secure-- Browser weigert sich, dieses Cookie zu setzen, sofern nicht auchSecuregesetzt ist.__Host-- Browser weigert sich ohneSecure,Path=/und keinDomain-Attribut.
Set-Cookie: __Host-session=abc123; Path=/; Secure; HttpOnly; SameSite=Lax
Kombiniere diese Regel mit HTTPS, HSTS aktivieren und der Referrer-Policy für eine vollständige Transport-Security-Baseline.
Häufig gestellte Fragen
Wird HttpOnly meinen Client-Code brechen?
Nur, wenn du das Cookie aus JavaScript liest. Für Session-/Auth-Cookies solltest du das nicht - das Cookie sollte für den Client undurchsichtig sein und nur vom Server genutzt werden. Wenn du Daten speicherst, die JS lesen muss, ist das eine andere Kategorie Cookie (Präferenzen, UI-State) und HttpOnly gilt nicht.
Was ist mit Consent- und Analytics-Cookies?
Consent- und Analytics-Cookies müssen oft tatsächlich aus JavaScript lesbar sein. Setze Secure und SameSite=Lax darauf, aber überspringe HttpOnly. Die MetricSpot-Prüfung toleriert das - sie warnt nur, wenn einem Session-Cookie die Flags fehlen.
Wirkt sich das direkt auf GDPR-Compliance aus?
Nicht auf der Einwilligungs-/Rechtsgrundlagen-Seite, aber auf der Sicherheitsseite. GDPR Artikel 32 verlangt „angemessene technische Maßnahmen” - fehlende Cookie-Flags werden in Aufsichtsbehörden-Entscheidungen regelmäßig als Sicherheitsmangel zitiert. Kombiniere mit einem Cookie-Consent-Banner und Datenschutz-Link für die rechtliche Ebene.
Quellen
Zuletzt aktualisiert 2026-05-11