/** * Same-Origin-Pruefung fuer zustandsaendernde app/api/.../route.ts-Handler. * * Next.js' eingebauter CSRF-Schutz (Origin-Header gegen Host geprueft) gilt * nur fuer Server Actions ("use server") — eigene Route-Handler wie * /api/checkout sind normale POST-Endpunkte ohne diesen automatischen Schutz * und muessen ihn sich selbst holen. Ohne diese Pruefung liesse sich ein * state-aendernder POST z.B. per
als "einfacher" * (nicht preflight-pflichtiger) Cross-Origin-Request faelschen (bekannte * JSON-CSRF-Umgehung) — bei /api/checkout koennte das, sofern der Besuch von * einer eingeloggten Kundschaft ausgeht, Bestellungen unter deren Konto * anlegen und Lagerbestand reservieren, ohne dass die Kundschaft das wollte. */ export function isTrustedOrigin(request: Request): boolean { const origin = request.headers.get("origin"); // Kein Origin-Header: moderne Browser senden ihn bei POST/PUT/DELETE sowohl // fuer Cross-Origin- als auch fuer Same-Origin-Anfragen mit, ein fehlender // Header stammt also nicht von einem regulaeren browserbasierten // Cross-Site-Angriff. Wird hier bewusst durchgelassen, um serverseitige/ // Tool-Aufrufe (z.B. Health-Checks) nicht zu blockieren. if (!origin) return true; try { const requestHost = new URL(request.url).host; const originHost = new URL(origin).host; return requestHost === originHost; } catch { return false; } }