Sicherheit: HTTP-Security-Header und Origin-Prüfung für schreibende Routen

- X-Frame-Options/CSP frame-ancestors gegen Clickjacking,
  nosniff, Referrer-Policy, Permissions-Policy
- Origin-Check als CSRF-Defense-in-Depth für /api/admin/users
  und /logout (zusätzlich zu SameSite=Lax-Cookies und JSON-Content-Type)
This commit is contained in:
2026-07-17 18:21:22 +02:00
parent fbd4659346
commit 7cac8cd4fc
4 changed files with 49 additions and 5 deletions
+17
View File
@@ -0,0 +1,17 @@
// 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 {
return new URL(origin).host === host;
} catch {
return false;
}
}