EMZETT.
Login

Content Security Policy (CSP)

Kurz: Ein HTTP-Header, mit dem eine Website dem Browser genau vorschreibt, woher Skripte, Bilder, Styles und andere Inhalte geladen werden dürfen — alles andere blockiert der Browser.

Genauer: Die Policy besteht aus Regeln („Direktiven“) wie script-src (erlaubte Skriptquellen), img-src, connect-src (erlaubte Verbindungen per fetch) und frame-ancestors (wer die Seite einbetten darf). Sie wirkt als zweite Verteidigungslinie gegen XSS: Selbst wenn ein Angreifer HTML einschleusen kann, führt der Browser fremde Skripte nicht aus, wenn die Policy sie verbietet.

Kontext bei uns: Emzett setzt eine CSP in next.config.ts, zusammen mit HSTS, X-Frame-Options: DENY und nosniff. Das Wiki hat eine eigene CSP ohne CDN-Quellen — alle Skripte liegen auf unserer eigenen Domain. Ehrlich gesagt erlaubt unsere Policy für Skripte noch 'unsafe-inline', weil Next.js Inline-Skripte erzeugt; die strengere Variante mit Nonces steht auf der Verbesserungsliste.

Im Detail

Typische Direktiven

  • default-src 'self': Grundregel, nur eigene Domain.
  • script-src: erlaubte Skripte; 'unsafe-inline' und 'unsafe-eval' schwächen den Schutz stark.
  • frame-ancestors 'none': niemand darf die Seite in einem iframe einbetten (Schutz vor Clickjacking).
  • connect-src: erlaubte Ziele für API-Aufrufe (bei uns z. B. Pusher für den Echtzeit-Chat und Stripe).

Aufwand und Fallen

Frameworks erzeugen inline Skripte (bei Next.js z. B. für Hydration), die eine strenge Policy blockieren würde; sauber löst man das mit Nonces oder Hashes. Jeder neue Drittanbieter (Analytics, Videos) muss in die Policy eingetragen werden — das ist gewollt, denn so fällt jede neue Datenverbindung bewusst auf. Ein Testlauf mit Content-Security-Policy-Report-Only zeigt Verstöße, ohne etwas zu blockieren.

Siehe auch: XSS, Firewall, Security