← ZURÜCK ZU DEN RATGEBERN / WEBSITES

HTTP-Security-Header erklärt: HSTS, CSP und mehr

Was HSTS, CSP, X-Frame-Options, Referrer-Policy und Permissions-Policy bewirken, welche Werte passen und warum „prüfen“ keine Schwachstelle bedeuten muss.

Von IPNixaVeröffentlicht am

Security-Header einer Website prüfen

Was Security-Header sind

Jede HTTP-Antwort beginnt mit Headern: Paaren aus Name und Wert wie Content-Type: text/html. Einige davon ändern, wie der Browser die Seite behandelt. Sie kosten nichts, gelten für jeden Besucher und werden auf dem Server, der Hosting-Plattform oder einem Content Delivery Network gesetzt, nicht im HTML der Seite.

IPNixa setzt seine eigenen Header in einer _headers-Datei, die Cloudflare mit jeder Seite ausliefert. Die Prüfung auf dieser Website ruft die eingegebene Adresse von unserem Server aus ab, folgt bis zu drei Weiterleitungen und liest die Header der endgültigen Antwort.

Die sechs wichtigsten Header

Diese Header bewertet die Prüfung. Die gezeigten Werte sind verbreitete, sichere Ausgangspunkte; sie sollten an die Anforderungen der eigenen Website angepasst werden.

Header, wovor er schützt, und ein typischer Wert
HeaderSchützt vorTypischer Wert
Strict-Transport-Security (HSTS)Herabstufung der Verbindung auf unverschlüsseltes HTTP nach dem ersten Aufrufmax-age=31536000; includeSubDomains
Content-Security-Policy (CSP)Ausführung eingeschleuster Skripte, was Cross-Site-Scripting eindämmtdefault-src 'self'; script-src 'self'; frame-ancestors 'none'
X-Frame-Options oder CSP frame-ancestorsLaden der Seite in einem versteckten Frame durch andere Websites (Clickjacking)DENY oder frame-ancestors 'none'
X-Content-Type-OptionsRaten des Dateityps durch den Browser und Ausführen von Daten als Skriptnosniff
Referrer-PolicyWeitergabe vollständiger Seitenadressen samt Pfaden und Query-Strings an andere Websitesstrict-origin-when-cross-origin
Permissions-PolicyZugriff der Seite oder eingebetteter Frames auf Kamera, Mikrofon oder Standortcamera=(), microphone=(), geolocation=()

Wie die IPNixa-Prüfung jeden Header bewertet

Jeder Header erhält einen von drei Zuständen: „vorhanden“, „prüfen“ oder „fehlt“. „Prüfen“ bedeutet, dass der Header existiert, sein Wert aber die jeweilige Regel unten nicht erfüllt. Das ist ein Hinweis, genauer hinzusehen, keine Sicherheitsbewertung.

Was echte Websites senden: eine Stichprobe

Am 2. November 2026 haben wir fünf Startseiten mit demselben User-Agent abgerufen, den die Prüfung verwendet, und die Antworten nach den Bewertungsregeln von IPNixa ausgewertet. Header ändern sich häufig, daher ist das nur eine Momentaufnahme.

Bewertungen für fünf Startseiten, 2. November 2026
WebsiteHSTSCSPFramesnosniffReferrerPermissions
github.comvorhandenprüfenvorhandenvorhandenvorhandenfehlt
ipnixa.comvorhandenprüfenvorhandenvorhandenvorhandenvorhanden
www.wikipedia.orgvorhandenfehltfehltfehltfehltfehlt
www.google.comfehltnur Report-Onlyvorhandenfehltfehltfehlt
example.comfehltfehltfehltfehltfehltfehlt

Stichprobe einordnen: „prüfen“ bedeutet keine Schwäche

Die Richtlinie von GitHub beschränkt Skripte auf den eigenen Asset-Host und bestimmte Hashes und ist damit streng. Sie wird nur deshalb mit „prüfen“ markiert, weil ihr style-src 'unsafe-inline' erlaubt und die Regel nach diesem Schlüsselwort in der gesamten Richtlinie sucht. Inline-Styles sind ein deutlich kleineres Risiko als Inline-Skripte, daher ist das ein bewusster Kompromiss und keine Lücke.

Unsere eigene Website wird aus einem anderen Grund mit „prüfen“ markiert: Ihre Richtlinie enthält nur frame-ancestors 'none'. Das verhindert das Einbetten, schränkt aber keine Skripte ein. Wir geben das Ergebnis hier unverändert wieder.

Die Startseite von Google sendet ihre Skriptrichtlinie als Content-Security-Policy-Report-Only, die Verstöße meldet, ohne sie zu blockieren, und schickte in dieser Antwort kein HSTS; große Websites können HTTPS auch auf anderem Weg durchsetzen, etwa über Preload-Listen der Browser. Das Portal von Wikipedia sendet ein sehr langes HSTS-max-age und auf dieser Seite sonst wenig. Nichts davon sagt aus, ob diese Websites insgesamt sicher sind; es zeigt nur, welche Schutzmaßnahmen im Browser jede Antwort anfordert.

Header auf der eigenen Website hinzufügen

Header einzeln hinzufügen, die Website neu laden und prüfen, ob Seiten, Logins, eingebettete Videos und Zahlungsformulare noch funktionieren, bevor der nächste Header folgt.

  1. Mit den risikoarmen Headern beginnen: X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin und X-Frame-Options: DENY, sofern die Seiten nicht von einer anderen Website eingebettet werden müssen.
  2. HSTS mit einem kurzen max-age wie 300 hinzufügen, prüfen, ob jede Subdomain per HTTPS funktioniert, und den Wert dann auf 31536000 erhöhen. includeSubDomains nur ergänzen, wenn alle Subdomains HTTPS unterstützen.
  3. Eine Content-Security-Policy schreiben und zunächst als Content-Security-Policy-Report-Only senden. Verstoßberichte sammeln oder die Browserkonsole beobachten, legitime Quellen korrigieren oder zulassen und dann auf den durchsetzenden Header umstellen.
  4. Permissions-Policy hinzufügen und darin die leistungsstarken Funktionen aufführen, die nicht genutzt werden, zum Beispiel camera=(), microphone=(), geolocation=().
  5. Unter nginx add_header mit dem Flag always verwenden, unter Apache Header always set, bei statischem Hosting oder einem CDN die Header-Datei oder die Regeln für Antwortheader der Plattform.
  6. Die Header-Prüfung von IPNixa erneut ausführen. Für jeden fehlenden Header zeigt sie eine kopierfertige Zeile für nginx, Apache oder eine _headers-Datei.

HSTS-Preload und andere Fallstricke

HSTS-Preload-Listen sind in Browser integriert, sodass schon der allererste Aufruf HTTPS nutzt. Für die Aufnahme einer Domain sind ein max-age von mindestens einem Jahr, includeSubDomains und die Anweisung preload erforderlich, und bis eine Entfernung bei den Nutzern ankommt, vergehen Monate. Nur eintragen lassen, wenn jede Subdomain, auch interne, dauerhaft HTTPS nutzt.

X-XSS-Protection ist veraltet; moderne Browser ignorieren den Header, und eine CSP ersetzt ihn. Die Header für Cross-Origin-Isolation (Cross-Origin-Opener-Policy, Cross-Origin-Embedder-Policy und Cross-Origin-Resource-Policy) bewertet die Prüfung nicht, weil sie nur für Websites nötig sind, die Funktionen wie gemeinsamen Speicher nutzen, und ihre Aktivierung eingebettete Inhalte von Drittanbietern blockieren kann.

Häufige Fragen

Ist eine Website unsicher, wenn ein Header fehlt?

Nein. Header aktivieren im Browser zusätzliche Schutzmechanismen gegen bestimmte Angriffe. Eine Website ohne sie kann trotzdem sorgfältig betrieben werden, und eine Website mit allen Headern kann trotzdem andere Schwachstellen haben. Das Ergebnis ist eine Checkliste für den Websitebetreiber, kein Urteil für Besucher.

Warum zeigt mein Browser Header, die die Prüfung nicht gesehen hat?

Websites können je nach Seite, Land, Anmeldestatus oder CDN-Standort unterschiedliche Header senden. Die Prüfung liest eine einzige Antwort für die eingegebene Adresse, abgerufen aus dem Netz von Cloudflare und ohne Cookies.

Sollte ich X-Frame-Options oder frame-ancestors verwenden?

Die CSP-Direktive frame-ancestors ist der moderne Mechanismus und kann gezielt bestimmte Websites zulassen. Wer zusätzlich X-Frame-Options sendet, deckt ältere Browser ab; sind beide vorhanden, richten sich aktuelle Browser nach frame-ancestors.

Kann ich eine Seite prüfen, die einen Login erfordert?

Nein. Die Prüfung sendet keine Cookies oder Zugangsdaten und lehnt private und lokale Adressen ab. Für Seiten hinter einem Login oder in einem privaten Netz die unveränderten Antwortheader aus den Entwicklertools des Browsers oder aus curl -I kopieren und in die Prüfung einfügen; eingefügte Header werden im Browser analysiert.

Quellen und weiterführende Informationen