KFZ-Bozo Handbuch

Daten, Datenschutz & Sicherheit › Content-Security-Policy (Browser-Härtung)

Content-Security-Policy (Browser-Härtung)

SicherheitLive✓ Geprüft am Sat Sep 05 2026 02:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)

Der Browser jedes Besuchers bekommt vom Server eine Liste, was auf der Seite laufen und wohin sie Verbindungen aufbauen darf. Fremde oder eingeschleuste Skripte fallen damit durch. Verstöße meldet der Browser von selbst an eine eigene Stelle im System zurück, wo sie im Ereignisprotokoll landen.

SystemKunde

Bild folgt

Jede Antwort des Servers trägt eine Kopfzeile, die dem Browser sagt, was er ausführen darf. Skripte akzeptiert er nur mit einer Einmalmarke, die der Server für genau diesen Aufruf erzeugt; ein eingeschleustes Skript hat sie nicht und läuft deshalb nicht. Von dieser Marke darf ein bereits erlaubtes Skript weitere nachladen, was die Anwendung selbst braucht. Ausgehende Verbindungen sind auf eine kurze Liste begrenzt: die drei möglichen KI-Anbieter (KI-Datenflüsse (welche Daten gehen an welchen Anbieter)), der Mail- und Kalenderdienst, der lokale Kartenleser am Büro-Rechner und das lokale Unterschriftenpad (Signotec-Unterschriftenpad). Eingebettete Fremdinhalte sind nur für die Landkarte auf der Kontaktseite erlaubt. Das Einbetten eigener Seiten in fremde Rahmen ist verboten — mit einer Ausnahme für die Vorschau eigener Dokumente. Die login-freie Kundenbericht-Seite bekommt eine eigene, viel strengere Fassung, weil sie ohne Anmeldung erreichbar ist und kein einziges Skript braucht (Kundenbericht). Meldet ein Browser einen Verstoß, nimmt das System die Meldung entgegen und legt sie als Ereignis mit 30 Tagen Aufbewahrung ab (Betriebsmessung, Protokoll & Sicherheitswarnungen).

  • Der Kartenleser meldet „nicht erreichbar", obwohl er läuft → Er hört auf einer anderen Adresse oder einem anderen Port als erlaubt. Die zusätzliche Adresse muss in der Server-Einrichtung ergänzt werden, sonst blockt der Browser die Verbindung.
  • Das Unterschriftenpad verbindet nicht → Gleicher Grund. Ein abweichender Rechnername oder Port braucht denselben zusätzlichen Eintrag.
  • Die Landkarte auf der Kontaktseite bleibt ein leerer Kasten → Der Eintrag für eingebettete Fremdinhalte fehlt oder wurde eingeengt.
  • Nach einer Änderung bleibt eine Seite weiß oder ein Bereich fällt in sich zusammen → Meist ein Skript ohne Einmalmarke oder eine eingebettete Formatierung, die nicht mehr erlaubt ist. Die Browser-Konsole nennt die verletzte Regel im Klartext.
  • Ein neuer externer Dienst antwortet nicht → Er steht nicht auf der Verbindungsliste. Erst eintragen, dann testen.
Gehört zuGehört zuSchütztSchütztContent-Se…Öffentliche Sy…Signotec-Unter…Öffentliche We…Büro-CRM (Admi…
  • Ob die zurückgemeldeten Verstöße jemand regelmäßig ansieht, sagt keine der gelesenen Quellen. Sie werden nur 30 Tage aufbewahrt.
  • Die Vorgaben für Formatierung erlauben weiterhin eingebettete Stile. Der Kommentar im Code nennt das ausdrücklich als offene Aufgabe, weil dafür erst jede eingebettete Formatierung entfallen müsste.
  • middleware.ts
  • app/api/csp-report/route.ts
  • next.config.ts
mechanismusmiddleware.ts setzt Header serverseitig; next.config.ts-Kommentar warnt explizit, die Policy dort NICHT zu duplizieren
regelSkripte nur mit einer pro Aufruf neu erzeugten Einmalmarke; ausgehende Verbindungen nur zu den drei KI-Anbietern, dem Mail-Dienst, dem lokalen Kartenleser und dem lokalen Unterschriftenpad; eingebettete Fremdinhalte nur die Landkarte; Einbetten der eigenen Seiten in fremde Rahmen verboten. Die Kundenbericht-Seite bekommt eine eigene, deutlich strengere Fassung.

Beleg: middleware.ts:150 — setzt 'Content-Security-Policy'-Header; app/api/csp-report/route.ts nimmt Reports entgegen (kein Auth-Header noetig, oeffentlich per Design)

Daten, Datenschutz & SicherheitSeite bearbeiten: wiki/seiten/daten-recht-sicherheit/sec-csp.md