← Alle Checks
SicherheitTypische Schwere: Niedrig

Scanner für schwaches HSTS

Erkennt einen HSTS-Header mit niedrigem max-age oder fehlendem includeSubDomains, der Downgrade-Lücken lässt.

Was es prüft

Dieser Scanner prüft deinen HSTS-Header und erkennt, wenn er ein zu niedriges max-age hat oder das Attribut includeSubDomains fehlt. Damit findet er HSTS-Konfigurationen, die ausnutzbare Lücken lassen.

Warum es wichtig ist

HSTS zwingt Browser dazu, mit deiner Seite immer HTTPS zu nutzen, aber wenn seine Dauer sehr kurz ist oder es die Subdomains nicht abdeckt, bleiben Fenster, in denen ein Angreifer eine unverschlüsselte Verbindung erzwingen kann. Diese Lücke ermöglicht Downgrade-Angriffe, die den Verkehr abfangen.

Wie man es behebt

Setze den HSTS-Header mit einem langen max-age (üblich ist ein Jahr, also 31536000 Sekunden) und füge includeSubDomains hinzu, um die ganze Domain abzudecken. Das macht man meist in der Konfiguration deines Servers oder CDN, und es ist klug, zuerst mit einem kleineren Wert zu testen, wenn du unsicher bist.

Wie diese Prüfung funktioniert

Diese Prüfung greift nur, wenn deine Seite den Header Strict-Transport-Security bereits sendet; fehlt er ganz, meldet das der Header-Scanner. Scanaris liest den Wert und prüft zwei Dinge: dass max-age mindestens ein Jahr beträgt (31536000 Sekunden) und dass includeSubDomains enthalten ist. Fehlt eines davon, öffnet er einen Befund mit niedrigem Schweregrad und dem Detail. Niedrig, weil ein kurzes oder teilweises HSTS immer noch etwas schützt; aber es lässt Lücken, die ein Angreifer ausnutzen kann.

Was HSTS tut und warum beide Attribute

Wenn der Browser diesen Header über HTTPS erhält, merkt er sich deine Domain in einer internen Liste und wandelt für die in max-age angegebene Zeit jeden Versuch, auf http:// zu gehen, in https:// um, bevor er irgendetwas sendet. Das beseitigt die erste unverschlüsselte Anfrage, die eine Weiterleitung nicht vermeiden kann. Ein max-age von ein paar Stunden oder Tagen lässt den Nutzer bei jedem Ablauf ungeschützt; daher das Minimum von einem Jahr. Ohne includeSubDomains kann ein Angreifer irgendwas.deinedomain.de über HTTP ansteuern und, durch die Funktionsweise von Domain-Cookies, Cookies stehlen oder setzen, die für die Hauptseite gelten.

So behebst du es

Der empfohlene Wert:

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • Vercel: setzt ihn bei Custom Domains standardmäßig; wenn du vercel.json oder next.config für andere Header nutzt, füge ihn dort mit diesem Wert hinzu.
  • Netlify: in der Datei _headers unter /*.
  • Nuxt: in routeRules der nuxt.config, Regel '/**'.
  • nginx: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; im server-Block für 443.
  • Express: helmet.hsts({ maxAge: 31536000, includeSubDomains: true }).

Bevor du includeSubDomains hinzufügst, bestätige, dass alle deine Subdomains HTTPS ausliefern: das Admin-Panel, die API, der Blog bei einem anderen Anbieter, die Mail-Subdomain, falls sie eine Website hat. Jede Subdomain, die nur über HTTP antwortet, hört in Browsern, die den Header schon gesehen haben, auf zu funktionieren, und es gibt keinen Weg zurück, bis max-age abläuft. Im Zweifel beginnst du mit max-age=86400 und ohne Subdomains, prüfst, und erhöhst den Wert, wenn alles läuft.

Preload

Mit preload und einem max-age von mindestens einem Jahr kannst du die Aufnahme deiner Domain in die Liste beantragen, die Chrome, Firefox und Safari mitbringen: Dann geht nicht einmal der erste Besuch über HTTP. Das ist der übliche Unterschied zwischen A und A+ in Analysetools. Aber es ist eine fast unumkehrbare Verpflichtung (aus der Liste herauszukommen dauert Monate), also mach es nur, wenn die ganze Domain schon eine Weile ohne Zwischenfälle auf HTTPS läuft.

Prüf, ob es behoben ist

curl -sI https://deinedomain.de | grep -i strict-transport

Es muss ein max-age von 31536000 oder mehr und includeSubDomains erscheinen. Prüf die öffentliche URL: Wenn du ein CDN davor hast, muss es den Header senden.

Häufige Fragen

Ersetzt HSTS die Weiterleitung von HTTP auf HTTPS?

Nein. Der Header kommt nur über HTTPS an, also braucht der erste Besuch weiterhin die Weiterleitung. Sie ergänzen sich: die Weiterleitung für das erste Mal, HSTS für alle weiteren.

Ich habe eine interne Subdomain, die nur über HTTP läuft.

Dann setze includeSubDomains nicht, bevor du sie migriert hast, und akzeptiere den Befund mit niedrigem Schweregrad solange. Eine unverschlüsselte Subdomain ist ein echtes Risiko für die Domain-Cookies, also lohnt sich die Migration.

Was passiert, wenn ich es falsch konfiguriere?

Browser, die den Header erhalten haben, behalten die Richtlinie bis zu ihrem Ablauf. Du kannst max-age=0 senden, damit sie sie vergessen, aber das sehen nur die, die über HTTPS zurückkommen. Deshalb ist es besser, mit kurzen Werten anzufangen.

Prüf es auf deiner Website

Scanne deine Website kostenlos und sieh, ob dieser und 44 weitere Checks bestehen, mit einem Fix-Prompt für jedes Problem.

Meine Website kostenlos scannen

Aus dem Blog

Verwandte Checks