Security-Header bewerten

Sechs kurze Zeilen in einer Serverantwort sagen dem Browser, wie vorsichtig er mit Ihrer Seite sein soll. Diese Prüfung liest sie, vergibt bis zu 100 Punkte und schreibt die fehlenden für Sie.

Oder probieren Sie github.com, wikipedia.org

Header sind Anweisungen, kein Inhalt

Jedes Mal, wenn ein Browser eine Seite anfordert, antwortet der Server in zwei Teilen. Der zweite Teil ist die Seite selbst. Der erste ist eine Liste von Headern, kurzen Zeilen aus Name und Wert, die der Besucher nie sieht, etwa der Dateityp, wie lange gecacht werden darf und welche Cookies zu behalten sind.

Eine Handvoll dieser Zeilen sind Sicherheitsanweisungen. Sie machen Ihren Server nicht schwerer angreifbar. Sie schalten Schutzfunktionen ein, die jeder moderne Browser bereits eingebaut hat und die ausgeschaltet bleiben, bis eine Website sie anfordert. Eine Website, die keine davon sendet, funktioniert trotzdem. Sie lässt nur eine kostenlose Rüstung im Karton liegen.

Die sechs Header, die diese Prüfung bewertet

HeaderPunkteWas er verhindert
Strict-Transport-Security25Dass ein Besucher in einem feindlichen WLAN unbemerkt auf unverschlüsseltes http:// herabgestuft wird. Nach dem ersten Besuch verweigert der Browser einfaches HTTP für Ihre Domain so lange, wie max-age angibt.
Content-Security-Policy25Eingeschleuste Skripte. Sie veröffentlichen die Liste der Orte, von denen Code geladen werden darf, und alles andere wird blockiert, selbst wenn es einem Angreifer gelingt, ein <script>-Tag in einen Kommentar oder ein Formularfeld zu schmuggeln.
X-Frame-Options15Clickjacking: Eine andere Website lädt Ihre in einem unsichtbaren Frame und bringt Menschen dazu, Ihre Schaltflächen zu drücken. Das moderne Gegenstück ist frame-ancestors in der CSP, das diese Prüfung ebenfalls akzeptiert.
X-Content-Type-Options15Typ-Raten. Mit nosniff kann eine als Bild hochgeladene Datei nicht als Skript ausgeführt werden, nur weil der Browser „fand, sie sehe wie eines aus“.
Referrer-Policy10Dass vollständige Seitenadressen, samt allem Privaten in der URL, an jede verlinkte Website durchsickern.
Permissions-Policy10Dass eingebettete Inhalte Dritter in Ihrem Namen nach Kamera, Mikrofon oder Standort fragen.

Die Gewichtung folgt dem Schaden, den jeder verhindert. Die beiden 25-Punkte-Header stoppen die Angriffe, die wirklich Konten leeren. Bei den 10-Punkte-Headern geht es um Privatsphäre und gute Manieren.

So lesen Sie die Note

Ein Header zählt nur dann voll, wenn sein Wert die Aufgabe erfüllt. In drei Fällen gibt es Teilpunkte:

  • HSTS kürzer als sechs Monate. Ein max-age von einem Tag ist beim Testen in Ordnung, schützt wiederkehrende Besucher aber nur einen Tag lang.
  • Eine CSP, die 'unsafe-inline' oder 'unsafe-eval' erlaubt, ohne Nonces oder Hashes. Das ist genau die Tür, die die Richtlinie schließen sollte.
  • Eine CSP im Modus Report-Only. Sie beobachtet und meldet, blockiert aber noch nichts. Das ist der richtige erste Schritt, solange Sie dort nicht stehen bleiben.

Die Prüfung listet außerdem jedes Cookie auf, das die Seite setzt, und ob es Secure, HttpOnly und SameSite trägt. Diese Flags fließen nicht in die Note ein, aber ein Session-Cookie ohne sie macht vieles von dem zunichte, was die Header erreichen.

Ein A bedeutet hier, dass die browserseitigen Schutzfunktionen für diese eine Antwort eingeschaltet sind. Über Passwörter, Plugins oder Server-Patches sagt es nichts. Verschiedene Seiten derselben Website können zudem verschiedene Header senden. Testen Sie also die Seiten, auf die es ankommt: Login, Kasse, Konto.

Wo Sie sie hinzufügen

Header werden dort gesetzt, wo Antworten entstehen, und die Schicht, die dem Besucher am nächsten ist, gewinnt:

Ein CDN oder Proxy (Cloudflare, Fastly, die Edge eines Hosters)
Meist eine Regel für „Response Header“ oder „Transform“ im Dashboard. Eine Regel deckt die ganze Website ab, gecachte Seiten eingeschlossen.
Apache
In .htaccess oder im Virtual Host: Header always set X-Content-Type-Options "nosniff". Das Wort always sorgt dafür, dass es auch für Fehlerseiten gilt.
nginx
add_header X-Content-Type-Options "nosniff" always; im server-Block. Achten Sie auf eines: Ein add_header in einem location-Block ersetzt die darüberliegenden, statt sie zu ergänzen.
Die Anwendung
Frameworks und CMS-Plugins können Header senden, aber nur auf Seiten, die sie erzeugen. Statische Dateien, die der Webserver direkt ausliefert, bekommen sie nicht.

Beginnen Sie mit den vier, die nichts kaputt machen können: nosniff, X-Frame-Options: SAMEORIGIN, eine Referrer-Policy und eine Permissions-Policy. Fügen Sie HSTS hinzu, sobald jede Subdomain über HTTPS funktioniert. Heben Sie sich die Content-Security-Policy für den Schluss auf und führen Sie sie zuerst im Report-Only-Modus ein, denn eine falsche CSP blockiert Ihre eigenen Skripte.

Häufige Fragen

Machen Security-Header meine Website kaputt?

Vier der sechs können Sie bedenkenlos hinzufügen. Vorsicht brauchen HSTS und Content-Security-Policy. HSTS bindet Besucher für die eingestellte Dauer an HTTPS. Mit includeSubDomains muss also jede Subdomain bereits ein gültiges Zertifikat haben. Eine CSP blockiert alles, was nicht auf Ihrer Liste steht. Testen Sie sie ein oder zwei Wochen lang mit Content-Security-Policy-Report-Only, bevor Sie sie durchsetzen.

Helfen Security-Header bei SEO?

Nicht direkt. Suchmaschinen ranken Seiten nicht nach ihren Headern. HTTPS ist ein schwaches Ranking-Signal, und HSTS sorgt dafür, dass HTTPS bleibt. Der eigentliche Gewinn sind weniger gehackte Seiten, und eine gehackte Website verliert schnell an Ranking.

Warum steht X-XSS-Protection nicht auf der Liste?

Browser haben den Filter entfernt, den er steuerte. Chrome hat ihn 2019 abgeschafft, Firefox hatte ihn nie. Die aktuelle Empfehlung lautet, ihn wegzulassen oder auf 0 zu setzen und sich stattdessen auf eine Content-Security-Policy zu verlassen.

Welches max-age sollte HSTS haben?

Ein Jahr (max-age=31536000) ist das übliche Ziel und das Minimum für die Preload-Listen der Browser. Beginnen Sie mit ein paar Minuten, prüfen Sie, dass nichts kaputtgeht, und erhöhen Sie dann schrittweise. Diese Prüfung gibt ab sechs Monaten die volle Punktzahl.

Meine Website liegt hinter Cloudflare. Wessen Header sind das?

Die, die der Besucher erhält, und auf die kommt es an. Setzt Ihr Ursprungsserver einen Header und das CDN entfernt oder überschreibt ihn, spiegelt die Note die Version des CDN wider.