flawopen.com/Referenz/Next.js Server Actions CSRF
CSRF bei Next.js Server Actions: Origin-Prüfung und sichere Konfiguration
Next.js Server Actions verwenden POST und vergleichen den Host von Origin mit x-forwarded-host oder host. Das ist wie die Prüfung, ob die Einladung des Besuchers denselben Veranstaltungsort nennt, den der Server erwartet. Das hilft gegen seitenübergreifende Übermittlungen, ist aber keine Autorisierung: Jede Aktion muss den Benutzer authentifizieren, Eingaben prüfen und Berechtigungen kontrollieren.
Eine Grenze ist wichtig: Laut aktueller Next.js-Dokumentation wird eine Anfrage ohne Origin mit einer Warnung zugelassen. Reverse-Proxys beeinflussen außerdem den verglichenen Host. Behandeln Sie diese Prüfung als eine Schutzschicht und lassen Sie den Proxy einen vertrauenswürdigen Host festlegen.
- Origin
- Vom Browser übermittelte Herkunft der auslösenden Seite; Next.js vergleicht ihren Host mit dem Anwendungshost.
- Host / X-Forwarded-Host
- Host-Wert für den Vergleich. Der Proxy muss weitergeleitete Angaben festlegen oder validieren.
- allowedOrigins
- Explizite Liste zusätzlicher Origin-Hosts, die Server Actions akzeptieren. Next.js unterstützt exakte Hosts und Wildcard-Muster.
- Authorization
- Entscheidung pro Aktion, ob der angemeldete Benutzer diese Operation an genau diesem Objekt ausführen darf.
So funktioniert die integrierte CSRF-Prüfung von Server Actions
Der Browser sendet eine Server Action
Eine Server Action wird per HTTP POST aufgerufen. SameSite blockiert standardmäßig viele seitenübergreifende Übermittlungen, aber POST allein ist kein vollständiger CSRF-Schutz.
Next.js vergleicht die Hosts
Bei vorhandenem Origin vergleicht Next.js dessen Host mit x-forwarded-host oder host. Abweichungen werden abgelehnt, außer der Origin-Host passt zu serverActions.allowedOrigins.
Die Aktion setzt ihre eigene Richtlinie durch
Nach der Anfrageprüfung muss die Aktion den Benutzer authentifizieren, jedes Argument validieren und den Vorgang autorisieren. Aktionskennungen und verborgene Formularfelder steuern keinen Zugriff.
Wichtige Grenzen: fehlender Origin und allowedOrigins
Die aktuelle Dokumentation sagt, dass Anfragen ohne Origin mit Warnung fortgesetzt werden. Gehen Sie nicht davon aus, dass jede Anfrage den Vergleich bestanden hat. Untersuchen Sie das Fehlen und authentifizieren, autorisieren und validieren Sie weiterhin in der Aktion.
allowedOrigins erlaubt exakte Hosts und Wildcards: * steht für ein Label, ** für eines oder mehrere. Erlauben Sie nur benötigte Domains und Subdomains, die Ihre Organisation kontrolliert. Eine Wildcard über benutzergesteuerte Subdomains kann einem Origin außerhalb Ihrer Kontrolle vertrauen.
Konfigurieren Sie den Reverse-Proxy als Teil der Sicherheitsgrenze
Next.js verwendet x-forwarded-host oder host für den Vergleich. Der Edge-Proxy muss vom Client gelieferte Forwarding-Header verwerfen und den Wert aus einem validierten öffentlichen Hostnamen setzen; die Anwendung darf nur über diesen vertrauenswürdigen Proxy erreichbar sein. Leitet der Proxy seinen internen Host weiter, konfigurieren Sie nur den erforderlichen öffentlichen Origin in allowedOrigins. Beheben Sie Abweichungen nicht durch Vertrauen in beliebige Hosts.
// Every subdomain, including delegated or tenant-controlled names, is trusted.
module.exports = {
experimental: {
serverActions: {
allowedOrigins: ['**.example.com'],
},
},
};
// Add only the public host that this deployment requires. module.exports = { experimental: { serverActions: { allowedOrigins: ['admin.example.com'], }, }, }; // Configure the edge to overwrite X-Forwarded-Host // with the validated public hostname.
Host-Advisories: verwandtes Risiko, getrennt von CSRF
Host-Vertrauen verursachte dokumentierte SSRF-Schwachstellen in Server Actions. CVE-2024-34351 betraf selbst gehostete Versionen vor 14.1.1, wenn eine Aktion zu einem relativen, mit / beginnenden Pfad umleitete und der Host-Header änderbar war. Ein separates Vercel-Advisory vom Juli 2026 beschreibt SSRF und mögliche Offenlegung interner Werte, wenn benutzerdefinierte Server Host-Header vom Client kontrollieren lassen; als behobene Versionen nennt es 15.5.21 und 16.2.11. Dies sind Host-Vertrauensfehler, kein Beleg für eine Umgehung des Origin-CSRF-Vergleichs.
Aktualisieren Sie für das Advisory von 2026 auf eine behobene Version. Bis dahin müssen Host und X-Forwarded-Host am Edge oder Proxy festgelegt oder validiert werden. Das Advisory dokumentiert __NEXT_PRIVATE_ORIGIN ab Version 14.2.0 als zusätzliche Übergangslösung. Prüfen Sie vor ihrer Nutzung die betroffenen und unterstützten Release-Zweige im Advisory.
Autorisieren und validieren Sie jede Server Action
Laut Next.js-Dokumentation sind Argumente als nicht vertrauenswürdig zu behandeln und muss jede Aktion prüfen, ob der aktuelle Benutzer sie aufrufen darf. Das unsichere Beispiel vertraut der vom Aufrufer gelieferten Objekt-ID. Das sichere Muster authentifiziert, validiert die Kennung und prüft Eigentümerschaft direkt in der Datenbankmutation.
"use server";
export async function deleteInvoice(invoiceId: string) {
await db.invoice.delete({ where: { id: invoiceId } });
}
"use server";
import { z } from "zod";
import { requireUser } from "@/auth";
const invoiceIdSchema = z.string().uuid();
export async function deleteInvoice(rawId: unknown) {
const user = await requireUser();
const invoiceId = invoiceIdSchema.parse(rawId);
const result = await db.invoice.deleteMany({
where: { id: invoiceId, ownerId: user.id },
});
if (result.count !== 1) throw new Error("Forbidden");
}
Checkliste für CSRF und Autorisierung bei Server Actions
- ✓Weisen Sie am Proxy unbekannte öffentliche Hostnamen zurück und überschreiben Sie clientseitige
Host/X-Forwarded-Host-Werte mit validierten Werten. - ✓Lassen Sie
allowedOriginsleer, sofern Proxy oder mehrere Origins es nicht erfordern; erlauben Sie nur kontrollierte Hosts mit möglichst engem Muster. - ✓Authentifizieren Sie in jeder Server Action den Benutzer, validieren Sie Argumente zur Laufzeit und autorisieren Sie das konkrete Objekt oder den Vorgang.
- ✓Behandeln Sie fehlendes
Originals protokollierte Auffälligkeit; die Framework-Warnung ist keine Autorisierungsentscheidung. - ✓Prüfen Sie benutzerdefinierte Route Handlers getrennt: Sie erben die Origin-Prüfung der Server Actions nicht. Implementieren und testen Sie CSRF-Schutz für cookie-authentifizierte Änderungen.
- ✓Verfolgen Sie Next.js-Sicherheitsmeldungen und aktualisieren Sie betroffene Deployments, besonders eigene Server, die vom Client stammende Host-Header akzeptieren.
Referenzen
- Next.js Docs — serverActions und allowedOrigins
- Next.js — Sicherheit in Next.js verstehen
- Vercel-Advisory — CVE-2024-34351: SSRF in Server Actions
- Vercel-Advisory — GHSA-89xv-2m56-2m9x: SSRF auf eigenen Servern (Juli 2026)
- CWE-352 — Cross-Site Request Forgery (CSRF)
- CWE-918 — Server-Side Request Forgery (SSRF)