bitlvl
DE

HTTP-Security-Header & CSP-Analyzer

Führen Sie curl -sI https://ihre.site/ aus und fügen Sie die Ausgabe ein, oder nur eine CSP. Jeder Header wird erklärt, die Security-Header werden benotet mit der Korrektur für jede Lücke, und die Content-Security-Policy wird so gelesen, wie ein Angreifer sie lesen würde. Diese Seite ruft nichts ab; sie liest nur, was Sie einfügen.

Ihre holen Sie mit: curl -sI https://example.com/ (mit -L Weiterleitungen folgen)

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Wie ein guter Satz Header aussieht

strict-transport-security: max-age=31536000; includeSubDomains; preload
content-security-policy: default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; object-src 'none'; base-uri 'none'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
x-content-type-options: nosniff
x-frame-options: DENY
referrer-policy: strict-origin-when-cross-origin
permissions-policy: camera=(), microphone=(), geolocation=(), payment=()
cross-origin-opener-policy: same-origin
cross-origin-resource-policy: same-origin

Das sendet diese Website. Für eine Anwendung mit Inline-Skripten wechselt die CSP zu Nonces: script-src 'nonce-<zufällig pro Antwort>' 'strict-dynamic', was strenger und leichter zu pflegen ist als eine Host-Allowlist.

Wie die CSP-Bewertung denkt

Eine CSP existiert, um zu begrenzen, was ein Angreifer tun kann, sobald er eine Injektionsstelle gefunden hat. Die Bewertung fragt also: Können mit einem injizierten String Skripte laufen? 'unsafe-inline' ohne Nonces sagt ja. Eine Wildcard- oder Schema-Quelle (*, https:, data:) sagt ja. Ein Host, der vom Angreifer wählbare Skripte ausliefert (öffentliche CDNs mit altem AngularJS, JSONP-Endpunkte auf googleapis.com, Storage-Buckets), sagt ja; deshalb ist eine lange Allowlist beliebter CDNs schwächer, als sie aussieht. Fehlende object-src und base-uri sind die zwei Direktiven, die vergessen werden und die Tür wieder öffnen. Die übrigen Direktiven (frame-ancestors, form-action, default-src) zählen für Clickjacking und Datenabfluss statt für Skriptausführung und werden daher niedriger gewichtet.

Wo Header gesetzt werden

  • nginx: add_header Name "wert" always; — beachten Sie, dass ein add_header in einer location alle auf Server-Ebene aufhebt (testen mit dem nginx-Location-Tester).
  • Apache: Header always set Name "wert" im vhost oder in .htaccess (mod_headers).
  • Cloudflare: HSTS unter SSL/TLS → Edge Certificates; andere Header über Transform Rules → Modify Response Header, was auch für Origins funktioniert, die Sie nicht ändern können.
  • Anwendungs-Frameworks: helmet (Node), secure_headers (Rails), django-csp, Laravel-Middleware — diese erzeugen auch Nonces pro Antwort.

Eine CSP sicher einführen

  1. Als Content-Security-Policy-Report-Only mit einem report-to-Endpunkt senden und eine Woche die Berichte beobachten.
  2. Die echten Verstöße beheben (Inline-Handler, Drittanbieter-Widgets), das Rauschen von Browser-Erweiterungen ignorieren.
  3. Den Header-Namen auf Content-Security-Policy umstellen. Report-Only zum Testen der nächsten Änderung behalten.

Fragen

Welche Header sind am wichtigsten?

Für eine Website mit Nutzerinteraktion: zuerst Content-Security-Policy, dann Strict-Transport-Security und X-Content-Type-Options. Framing- und Referrer-Policies sind billig hinzuzufügen. Der Rest ist Hygiene: Versionen verbergen, Cookies flaggen, veraltete Header entfernen.

Warum wird meine CSP als schwach bewertet, obwohl sie nur vertrauenswürdige Hosts listet?

Weil Vertrauen nicht die Frage ist; die Frage ist, ob irgendein Skript auf diesen Hosts dazu gebracht werden kann, Angreifercode auszuführen. Öffentliche CDNs hosten tausende Bibliotheksversionen, manche mit bekannten Gadgets (AngularJS-Templates, JSONP-Callbacks). Eine Nonce-basierte Policy mit strict-dynamic hat dieses Problem nicht, und diese Seite bewertet sie als stärkste Konfiguration.

Ist X-XSS-Protection noch nützlich?

Nein. Chrome hat den XSS-Auditor 2019 entfernt, Edge 2018; Firefox hatte nie einen. Der Header ist als „0“ harmlos und war als „1; mode=block“ in alten Browsern schädlich. Entfernen Sie ihn und nutzen Sie CSP.

Wie bekomme ich die Header einer Seite, die weiterleitet?

curl -sIL https://example.com/ gibt jede Antwort der Kette aus. Fügen Sie alles ein; die letzte Antwort wird benotet und die Weiterleitungen werden aufgelistet. Prüfen Sie, dass http:// in einem Schritt auf https:// weiterleitet.

Entspricht die Note der von securityheaders.com?

Ungefähr: Beide zählen dieselben sechs Kern-Header. Diese Seite bewertet zusätzlich den CSP-Inhalt statt nur das Vorhandensein und zieht für Lecks und veraltete Header ab, sodass eine Website mit schwacher CSP hier schlechter abschneidet.