Die unsichtbaren Türsteher: Security-Header und CSP – live demonstriert an dieser Seite
Es gibt eine Schutzschicht, die jede gute Website trägt und die trotzdem kaum jemand je zu Gesicht bekommt: ein paar Zeilen HTTP-Header, die der Server jeder Antwort mitgibt – und die Ihr Browser wie eine Hausordnung durchsetzt. Sie kosten nichts, bremsen nichts und verhindern ganze Angriffs-Klassen. Dieser Beitrag erklärt die sieben wichtigsten. Und weil Behaupten nicht unser Stil ist: Diese Seite prüft ihre eigenen Header gleich hier unten, live, in Ihrem Browser.
Warum der Browser der beste Wachmann ist
Die meisten Angriffe auf Website-Besucher brauchen einen Komplizen: den Browser. Ein eingeschleustes Skript ausführen, die Seite unsichtbar in eine Falle einbetten, eine Verbindung auf unverschlüsselt herabstufen – all das tut am Ende der Browser, weil ihn niemand angewiesen hat, es zu lassen. Genau dafür sind Security-Header da: Der Server sagt einmal pro Antwort, was erlaubt ist, und der Browser setzt es kompromisslos durch. Der Clou: Die Regeln reisen mit jeder einzelnen Antwort mit. Es gibt keinen Agenten, den man installieren, und kein Plugin, das man aktuell halten müsste.
Die sieben Türsteher im Einzelnen
| Header | Verhindert | So wirkt er |
|---|---|---|
| Content-Security-Policy | Eingeschleuste Skripte (XSS), fremde Ladequellen | Positivliste: Nur gelistete Quellen dürfen Skripte, Stile, Bilder und Verbindungen liefern – alles andere blockiert der Browser. Die wirksamste Einzelmaßnahme dieser Liste. |
| Strict-Transport-Security (HSTS) | Downgrade auf unverschlüsseltes HTTP | Der Browser merkt sich für Monate: Diese Domain nur per HTTPS – selbst wenn jemand http:// tippt oder ein Angreifer im Café-WLAN die Verschlüsselung „vergessen" lassen will. |
| X-Content-Type-Options | MIME-Sniffing | nosniff verbietet dem Browser, Dateitypen zu „erraten" – eine als Bild getarnte Skriptdatei bleibt ein Bild und wird nicht ausgeführt. |
X-Frame-Options / frame-ancestors | Clickjacking | Die Seite darf nicht unsichtbar in fremde Seiten eingebettet werden, wo Besucher auf getarnte Schaltflächen gelockt würden. |
| Referrer-Policy | Datenabfluss beim Weiterklicken | Andere Websites erfahren nicht mehr, von welcher Unterseite Ihr Besucher kam – nur noch die Domain, wenn überhaupt. Ein kleiner Privatsphäre-Gewinn ganz ohne Banner. |
| Permissions-Policy | Ungefragte Hardware-Zugriffe | Kamera, Mikrofon, Standort & Co. werden für die Seite technisch abgeschaltet – nicht per Versprechen, sondern per Browser-Mechanik. Nebenbei steigt man damit auch aus Googles „Topics"-Werbeprofilierung aus. |
| Cross-Origin-Opener-Policy | Fenster-Übergriffe | Fremde Seiten, die diese Website in einem neuen Fenster öffnen, verlieren jeden Draht zu ihr – die Tabnabbing-Trickfamilie läuft ins Leere. |
CSP in der Praxis: eine Positivliste, zwei Stufen
Die Content-Security-Policy ist der anspruchsvollste der sieben – denn sie muss exakt zur Website passen. Zu locker, und sie schützt nicht; zu streng, und sie legt die eigenen Funktionen lahm. Unsere Lösung auf byteland.de ist zweistufig: Global gilt die strenge Regel – diese Website darf ausschließlich von sich selbst laden, keine fremden Skripte, keine externen Schriften, keine Tracker (die es ohnehin nicht gibt – die CSP macht aus dem Versprechen eine technische Garantie). Nur die drei KI-Demos – Copilot, Werkstatt-Suche und Diktier-Demo – bekommen eine eigene, gezielt gelockerte Stufe, die genau die zwei Quellen erlaubt, die sie brauchen: die KI-Bibliothek vom CDN und die Modellgewichte von Hugging Face.
Beim Apache-Webhosting genügt dafür die .htaccess-Datei – hier die gekürzte Fassung unserer Konfiguration:
# Stufe 1 – alle Seiten: nur die eigene Domain
Header always set Content-Security-Policy "default-src 'self'; \
script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; \
img-src 'self' data:; connect-src 'self'; object-src 'none'; \
frame-ancestors 'self'; base-uri 'self'; upgrade-insecure-requests"
# Stufe 2 – nur die KI-Demos: CDN + Modell-Host zusaetzlich erlaubt
<FilesMatch "^(copilot|suche|diktat)\.html$">
Header always set Content-Security-Policy "default-src 'self'; \
script-src 'self' 'unsafe-inline' 'wasm-unsafe-eval' blob: \
https://esm.run https://cdn.jsdelivr.net; \
connect-src 'self' https://cdn.jsdelivr.net \
https://huggingface.co https://*.huggingface.co https://*.hf.co; \
worker-src 'self' blob:; object-src 'none'; frame-ancestors 'self'"
</FilesMatch>
# Mikrofon: siteweit aus - nur die Diktier-Demo darf (nach Klick + Browser-Erlaubnis)
Header always set Permissions-Policy "microphone=(), camera=(), geolocation=()"
<Files "diktat.html">
Header always set Permissions-Policy "microphone=(self), camera=(), geolocation=()"
</Files>
Das Prinzip: so streng wie möglich, so locker wie nötig – und die Lockerung gilt nur dort, wo sie begründet ist. Dass das Mikrofon auf genau einer Seite erlaubt ist und sonst nirgends, ist gelebter Datenschutz per Serverkonfiguration.
Als uns die eigene CSP ein Bein stellte
Wie ernst der Browser diese Regeln nimmt, haben wir beim Bau unserer Diktier-Demo selbst erlebt: Das Sprachmodell blieb beim Laden einfach stehen – kein Fehler auf der Seite, kein Absturz, nur ein Ladehinweis, der nie fertig wurde. Des Rätsels Lösung stand in der Entwicklerkonsole: Die KI-Bibliothek startet ihr WebAssembly-Laufzeitmodul als sogenanntes blob:-Skript – und genau diese Quelle stand nicht auf unserer Positivliste. Der Browser blockierte kommentarlos, wie bestellt. Eine Zeile Freigabe später lief alles. Die Lehre daraus geben wir gern weiter: Eine CSP testet man nicht, indem die Seite „aussieht wie immer", sondern indem man jede Funktion einmal wirklich benutzt. Der Türsteher unterscheidet nämlich nicht zwischen Angreifer und eigener Vergesslichkeit.
Selbst nachprüfen – bei uns und bei sich
Drei Handgriffe, keiner braucht Installation:
# 1. Kommandozeile: Header einer beliebigen Website ansehen
curl -I https://byteland.de
# 2. Browser: F12 druecken -> Netzwerk-Tab -> Dokument anklicken -> Antwort-Header
# 3. Schulnote mit Erklaerungen: https://securityheaders.com
Der dritte Weg ist der unterhaltsamste: securityheaders.com vergibt Noten von F bis A+ und erklärt zu jedem fehlenden Header, was er verhindern würde. Probieren Sie es ruhig mit ein paar bekannten Websites – die Ergebnisse sind ernüchternder, als man denkt. Kleiner Realitäts-Check: Der Mechanismus schützt die Besucher der Website; er ersetzt weder Updates noch Backups noch sichere Passwörter. Aber er gehört zur Grundhygiene – wie das Schloss an der Haustür.
Und unsere eigene Note?
Diese Website erreicht auf securityheaders.com die Note A (geprüft am 5. Juli 2026) – alle sechs bewerteten Header sind gesetzt. Das fehlende Plus ist kein Versehen, sondern ein ehrlicher Kompromiss, und der Prüfbericht benennt ihn korrekt: Unsere CSP erlaubt 'unsafe-inline' für Skripte. Der Grund: Diese Seite ist bewusst statisch gebaut – ohne Server-Anwendung gibt es keine Nonces, und das Pflegen von Hashes für jedes Inline-Skript wäre ein Wartungsrisiko, das mehr kaputt macht als absichert. Da hier kein fremder oder von Nutzern stammender Inhalt eingebettet wird, ist die realistische Angriffsfläche dafür minimal. So ist die Reihenfolge ehrlich: erst die Architektur ohne Einfallstore, dann die Header als Zaun – und eine Note, die wir erklären können, statt einer, die nur glänzt.
Häufige Fragen
Was ist eine Content-Security-Policy (CSP)?
Eine Positivliste, die der Server jeder Seite mitgibt: Sie legt fest, aus welchen Quellen der Browser Skripte, Stile, Bilder und Verbindungen überhaupt laden darf. Alles, was nicht auf der Liste steht, wird blockiert – die wirksamste Einzelmaßnahme gegen eingeschleuste Skripte (XSS). Wichtig: Die CSP muss zur Website passen, sonst blockiert sie die eigenen Funktionen.
Kosten Security-Header Geld oder Performance?
Nein. Es sind wenige Textzeilen in der Server-Konfiguration (beim Apache-Webhosting meist die .htaccess-Datei). Sie werden mit jeder Antwort mitgeschickt und kosten weder spürbare Rechenzeit noch Lizenzgebühren – der Schutz entsteht im Browser des Besuchers.
Wie prüfe ich die Security-Header meiner eigenen Website?
Drei Wege: Im Browser F12 drücken, im Netzwerk-Tab das Dokument anklicken und die Antwort-Header lesen. Auf der Kommandozeile curl -I https://ihre-domain.de aufrufen. Oder securityheaders.com nutzen – der Dienst vergibt Schulnoten von F bis A+ und erklärt, was fehlt.
Was bringt HSTS (Strict-Transport-Security)?
HSTS lässt den Browser dauerhaft merken, dass eine Domain nur per HTTPS besucht werden darf. Selbst wenn jemand http://… eintippt oder ein Angreifer im offenen WLAN die Verbindung herabstufen will, besteht der Browser auf der verschlüsselten Verbindung – der klassische Downgrade-Angriff läuft ins Leere.
Wie viele Türsteher hat Ihre Website?
Wir prüfen Ihren Web-Auftritt, richten die passenden Security-Header ein und testen danach jede Funktion – damit der Schutz greift, ohne etwas kaputtzumachen. Für Websites, Kunden-Portale und alles, was sonst noch über HTTP spricht.
Jetzt Kontakt aufnehmen →