Wenn ein Browser Ihre Website abruft, schickt der Server vor dem eigentlichen Inhalt eine Reihe von Zusatzangaben mit. Diese HTTP-Header sehen Besucher nie. Sie regeln zum Beispiel, wie lange eine Datei zwischengespeichert werden darf oder in welchem Format sie vorliegt. Ein Teil von ihnen dient ausschließlich der Sicherheit. Er sagt dem Browser, was er auf Ihrer Website zulassen soll und was nicht.
Manche Firmenwebsites senden keinen einzigen dieser Header. Auffallen tut das oft erst, wenn ein Geschäftskunde einen Sicherheitsfragebogen schickt oder ein Prüfwerkzeug eine schlechte Note vergibt. Dabei lassen sich die wichtigsten Header mit überschaubarem Aufwand einrichten.
In diesem Glossar erklären wir die sechs Header, die in keiner Prüfung fehlen sollten. Dazu kommt jeweils der Hinweis, worauf Sie bei der Einrichtung achten müssen.
So prüfen Sie Ihre Website in einer Minute
Geben Sie Ihre Adresse bei securityheaders.com oder im HTTP Observatory von Mozilla ein. Beide Werkzeuge zeigen, welche Header Ihre Website sendet und welche fehlen. Die Note oben ist nur ein grober Anhaltspunkt. Aufschlussreicher ist die Liste darunter.
Wer selbst nachsehen möchte, öffnet im Browser die Entwicklerwerkzeuge mit der Taste F12, wechselt in den Reiter „Netzwerk“ und lädt die Seite neu. Ein Klick auf den ersten Eintrag zeigt unter „Antwort-Header“ alles, was der Server mitgeschickt hat.
Strict-Transport-Security (HSTS)
Ihre Website läuft über https, das Schloss im Browser ist da. Trotzdem tippen manche Besucher die Adresse ohne https ein oder folgen einem alten Link. Der erste Aufruf geht dann unverschlüsselt hinaus und wird erst danach umgeleitet. In diesem kurzen Moment kann jemand im selben WLAN dazwischengehen.
HSTS schließt diese Lücke. Der Header teilt dem Browser mit, dass er Ihre Domain für eine bestimmte Zeit nur noch verschlüsselt aufrufen soll. Üblich ist ein Jahr, also max-age=31536000. Mit dem Zusatz includeSubDomains gilt die Regel für alle Subdomains. Setzen Sie ihn nur, wenn wirklich jede Subdomain ein gültiges Zertifikat hat, auch die alte Testumgebung. Sonst sperren Sie sich selbst aus. Die genaue Wirkung beschreibt MDN zu Strict-Transport-Security.
Content-Security-Policy (CSP)
Die CSP ist der wirksamste und zugleich anspruchsvollste Header. Sie legt fest, aus welchen Quellen Ihre Seite Skripte, Stylesheets, Bilder, Schriften und eingebettete Inhalte laden darf. Schleust ein Angreifer über ein unsicheres Plugin ein fremdes Skript ein, blockiert der Browser es. Die Quelle steht schlicht nicht auf der Liste.
Eine CSP ist also eine Positivliste. Alles, was nicht ausdrücklich erlaubt ist, wird blockiert. Genau deshalb braucht sie Sorgfalt. Wer ein Video, eine Karte oder ein Buchungsfenster eines anderen Anbieters einbindet, muss dessen Adresse eintragen. Bewährt hat sich dieses Vorgehen:
- Zuerst den Header
Content-Security-Policy-Report-Onlysetzen. Der Browser meldet Verstöße dann nur, blockiert aber nichts. - Ein bis zwei Wochen beobachten, alle Seiten und Formulare durchklicken und die Liste ergänzen.
- Erst danach die eigentliche
Content-Security-Policyaktivieren.
Ein Warnsignal sind die Angaben unsafe-inline und unsafe-eval bei Skripten. Sie heben einen großen Teil der Schutzwirkung wieder auf. In älteren Redaktionssystemen lassen sie sich nicht immer ganz vermeiden. Bei einer neuen Website sollten sie fehlen.
X-Content-Type-Options
Ein kleiner Header mit nur einem sinnvollen Wert, nämlich nosniff. Er verbietet dem Browser, den Dateityp zu erraten. Ohne ihn könnte eine hochgeladene Datei unter Umständen als Skript ausgeführt werden, obwohl der Server sie als Text ausliefert. Mit ihm gilt nur der Typ, den der Server angibt. Diesen Header kann praktisch jede Website ohne Nebenwirkungen setzen.
X-Frame-Options und frame-ancestors
Beim sogenannten Clickjacking wird Ihre Seite unsichtbar in eine fremde Seite eingebettet. Der Besucher glaubt, auf einen harmlosen Knopf zu klicken. Tatsächlich löst er eine Aktion auf Ihrer Seite aus, etwa in einem Kundenkonto.
Der ältere Header X-Frame-Options: SAMEORIGIN erlaubt das Einbetten nur noch auf Ihrer eigenen Domain. Moderner ist die Angabe frame-ancestors innerhalb der Content-Security-Policy, die MDN als Nachfolger beschreibt. In der Praxis setzt man oft beide.
Referrer-Policy
Klickt ein Besucher auf einen Link zu einer anderen Website, erfährt diese normalerweise, von welcher Seite er kam. Steht in Ihrer Adresse etwas Vertrauliches, etwa ein Suchbegriff oder eine Bestellnummer, wandert das mit. Die Referrer-Policy begrenzt diese Weitergabe. Mit dem Wert strict-origin-when-cross-origin erfahren fremde Seiten nur noch Ihre Domain, nicht den vollständigen Pfad. Ihre eigene Auswertung funktioniert weiter wie gewohnt.
Permissions-Policy
Browser können Websites Zugriff auf Kamera, Mikrofon, Standort und andere Gerätefunktionen geben. Eine typische Firmenwebsite braucht davon nichts. Mit der Permissions-Policy schalten Sie diese Funktionen ab, auch für eingebettete Inhalte. Ein Beispiel ist camera=(), microphone=(), geolocation=(). Ein eingebundenes Werbe- oder Analyseskript kann diese Rechte dann ebenfalls nicht anfordern.
Alle sechs Header im Überblick
| Header | schützt vor | Aufwand |
|---|---|---|
| Strict-Transport-Security | unverschlüsseltem Erstaufruf | gering, Subdomains prüfen |
| Content-Security-Policy | eingeschleusten Skripten | hoch, sorgfältig testen |
| X-Content-Type-Options | falsch gedeuteten Dateien | sehr gering |
| X-Frame-Options, frame-ancestors | Einbetten in fremde Seiten | gering |
| Referrer-Policy | Weitergabe von Adressdetails | sehr gering |
| Permissions-Policy | unnötigem Zugriff auf Gerätefunktionen | gering |
Was Sie besser entfernen
Sicherheit heißt auch, weniger preiszugeben. Viele Server verraten in Headern wie Server oder X-Powered-By, welche Software in welcher Version läuft. Für einen Angreifer ist das eine bequeme Abkürzung. Entfernen Sie diese Angaben oder kürzen Sie sie auf das Nötigste.
In älteren Anleitungen taucht außerdem noch X-XSS-Protection auf. Moderne Browser werten diesen Header nicht mehr aus, und das OWASP Secure Headers Project rät davon ab, sich auf ihn zu verlassen. Er gehört nicht mehr in eine aktuelle Konfiguration.
Wo die Header eingerichtet werden
Bei den meisten Hostings stehen die Header in der Datei .htaccess oder in der Serverkonfiguration. Manche Redaktionssysteme bieten Plugins dafür an, und ein vorgeschaltetes CDN kann sie ebenfalls setzen. Entscheiden Sie sich für eine Stelle. Werden Header doppelt gesetzt, widersprechen sie sich leicht, und niemand weiß mehr, welche Regel gilt.
Nach jeder Änderung gilt dieselbe Routine:
- Prüfwerkzeug erneut laufen lassen.
- Wichtige Seiten, Formulare, Warenkorb und eingebettete Inhalte durchklicken.
- In den Entwicklerwerkzeugen unter „Konsole“ nach roten Meldungen suchen.
Was Header nicht leisten
Sicherheits-Header sind ein Sicherheitsgurt, kein Schutzschild. Sie mildern die Folgen bestimmter Angriffe im Browser. Eine veraltete Erweiterung mit bekannter Lücke, ein schwaches Passwort im Administrationsbereich oder ein fehlendes Backup gleichen sie nicht aus. Am meisten bringen sie als Teil einer regelmäßigen Pflege, in der auch Updates und Sicherungen ihren festen Platz haben.
Wenn Sie wissen möchten, wie Ihre Website dasteht, oder die Header sauber einrichten lassen wollen, finden Sie mehr unter Hosting und Wartung. Für neue Projekte planen wir die Header von Anfang an mit ein, beschrieben unter Webdesign und Firmenwebsites.