Cookie-Sicherheit für Next.js konfigurieren
Schritt-für-Schritt-Anleitung: Secure, HttpOnly und SameSite in Next.js einrichten — mit der cookies() API im App Router, next-auth-Konfiguration und Middleware für dynamische Cookie-Flags.
Wie steht Ihre Domain bei Cookie-Sicherheit?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.
Häufig gestellte Fragen
Wie setze ich Cookies mit der cookies() API im Next.js App Router?
Importieren Sie cookies aus next/headers und rufen Sie cookies().set() auf — z.B. in einer Server Action oder einem Route Handler. Übergeben Sie als drittes Argument ein Optionsobjekt mit httpOnly: true, secure: process.env.NODE_ENV === "production", sameSite: "strict" und path: "/". Achtung: cookies() kann nur in Server Components, Server Actions und Route Handlers aufgerufen werden, nicht im Client.
Wie konfiguriere ich next-auth für sichere Cookie-Flags?
In Ihrer next-auth- bzw. Auth.js-Konfiguration gibt es eine cookies-Option. Dort können Sie für sessionToken einen Namen mit __Secure- Prefix und Optionen wie httpOnly: true, sameSite: "strict", path: "/" und secure: true definieren. next-auth setzt das Secure-Flag in Production automatisch, wenn Sie die NEXTAUTH_URL auf eine HTTPS-URL setzen.
Warum fehlt das Secure-Flag im Development?
Das Secure-Flag markiert einen Cookie als "nur über HTTPS senden". Im lokalen Development läuft Next.js über HTTP (localhost), weshalb Secure-Cookies nicht gesetzt werden können. Die Prüfung process.env.NODE_ENV === "production" sorgt dafür, dass das Flag in Production (HTTPS) automatisch aktiv ist. Im Development-Modus können Sie trotzdem alle anderen Flags (HttpOnly, SameSite, Path) testen.
Was ist der Unterschied zwischen next.config.ts headers() und der cookies() API?
next.config.ts headers() eignet sich für statische HTTP-Response-Header, kann aber keine Cookies im Set-Cookie-Format direkt setzen. Die cookies() API aus next/headers ist speziell für das Setzen von Cookies im App Router konzipiert und unterstützt alle Cookie-Attribute. Für den Reverse Proxy davor (Nginx, Caddy) können Sie zusätzlich proxy_cookie_flags nutzen, um fehlende Flags nachzurüsten.
Kann ich Cookie-Flags in Next.js Middleware setzen?
Ja. In middleware.ts können Sie über NextResponse.next() oder NextResponse.redirect() auf das response.cookies-Objekt zugreifen und Cookies setzen oder modifizieren. Das ist besonders nützlich, wenn Sie Flags für Cookies nachrüsten wollen, die von einer API-Route gesetzt wurden, ohne den Route-Handler selbst anzufassen.
Wann sollte ich SameSite=Strict vs. SameSite=Lax in Next.js verwenden?
Verwenden Sie SameSite=Strict für reine Web-Apps ohne externen Redirect-Flow (kein OAuth, kein Payment-Redirect). Für Apps mit OAuth-Login (Google, GitHub) oder Payment-Redirects (Stripe) verwenden Sie SameSite=Lax — sonst geht die Session beim Callback-Redirect verloren. next-auth nutzt standardmäßig Lax, was für die meisten Apps korrekt ist.
Wie vermeide ich Cookie-Probleme bei OAuth-Callbacks in next-auth?
next-auth setzt standardmäßig SameSite=Lax für den Session-Token, was OAuth-Callbacks funktionsfähig hält. Ändern Sie sameSite nur auf "strict", wenn Sie keine externen Redirects (OAuth, Payment-Provider) verwenden. Für den CSRF-Token-Cookie von next-auth ist Lax ebenfalls der sichere Standard.