Files
Speisekarte/lib/origin.ts
T
florian.wilde bfd32d1aa7 Konfigurierbare öffentliche URL (APP_URL) inkl. Passkey-Anbindung
- Neue Umgebungsvariable APP_URL (docker-compose reicht sie durch,
  Default http://localhost:3000): gilt beim CSRF-Origin-Check als
  eigene Origin, falls ein Reverse-Proxy den Host-Header umschreibt
- scripts/configure-passkeys.mjs setzt die Passkey-Domain (WebAuthn
  rp_id/origins) des Supabase-Projekts auf APP_URL – ein Befehl statt
  manueller Dashboard-Konfiguration beim Domain-Wechsel
2026-07-17 23:53:13 +02:00

23 lines
1010 B
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// CSRF-Schutz (Defense-in-Depth) für schreibende Route-Handler:
// Browser senden bei Cross-Site-POSTs immer einen Origin-Header –
// stimmt er nicht mit dem Host überein, wird die Anfrage abgelehnt.
// (Erste Verteidigungslinie sind bereits die SameSite=Lax-Session-
// Cookies von @supabase/ssr sowie der JSON-Content-Type.)
export function isSameOrigin(request: Request): boolean {
const origin = request.headers.get("origin");
// Kein Origin-Header: kein Browser-Cross-Site-Kontext (z. B. curl);
// die Authentifizierung greift trotzdem.
if (!origin) return true;
const host = request.headers.get("host");
try {
const originUrl = new URL(origin);
if (originUrl.host === host) return true;
// Hinter einem Reverse-Proxy, der den Host-Header umschreibt, gilt
// zusätzlich die öffentlich konfigurierte App-URL als eigene Origin.
const appUrl = process.env.APP_URL;
return !!appUrl && originUrl.origin === new URL(appUrl).origin;
} catch {
return false;
}
}