HSTS werd in november 2012 gestandaardiseerd in RFC 6797. Het doel is een gat te dichten dat een gewone redirect van HTTP naar HTTPS openlaat: zolang een bezoeker voorbeeld.nl intypt zonder protocol, begint zijn browser met een onversleuteld verzoek. Op openbare wifi kan een aanvaller die ertussen zit dat verzoek onderscheppen en het slachtoffer op HTTP houden, een aanval die bekendstaat als SSL stripping. Met HSTS onthoudt de browser dat de site HTTPS vereist en probeert hij de onversleutelde versie niet eens meer.
Hoe HSTS werkt
De server voegt de header Strict-Transport-Security toe aan zijn HTTPS-antwoorden. Er zijn drie directives:
max-age(verplicht): de tijd, in seconden, dat de browser de instructie onthoudt;includeSubDomains: past de regel toe op alle subdomeinen;preload: geeft aan dat het domein in de preloadlijst van browsers mag worden opgenomen.
Strict-Transport-Security: max-age=31536000; includeSubDomains
De RFC schrijft twee belangrijke gedragingen voor. Ten eerste negeert een browser de header als die via HTTP binnenkomt, zodat een tussenpersoon hem niet kan toevoegen of wissen. Ten tweede verbreekt elke fout in het TLS-certificaat van een HSTS-site de verbinding: de gebruiker heeft geen knop meer om "toch door te gaan".

Het eerste bezoek en preloading
HSTS heeft een zwakte die zowel MDN als de RFC erkennen: het werkt pas na een eerste geslaagde beveiligde verbinding. Om dat gat te dichten, houdt Chrome een lijst bij met domeinen die in de browser is ingebouwd, en ook Firefox, Safari en Edge baseren zich daarop. De site hstspreload.org vereist een geldig certificaat, een redirect van HTTP naar HTTPS, alle subdomeinen op HTTPS en een header met een max-age van minstens 31536000 seconden (een jaar), includeSubDomains en preload. De site waarschuwt dat opname moeilijk terug te draaien is en dat verwijdering maanden nodig heeft om gebruikers te bereiken.
Voor WordPress
WordPress verstuurt zelf geen HSTS. Controleer voordat je het inschakelt of de hele site via HTTPS werkt: adressen in Instellingen, Algemeen, gemengde inhoud opgelost, automatische verlenging van het certificaat (vaak via Let's Encrypt bij je hostingprovider). Onze gids HTTPS op WordPress loopt die stappen door.
- Begin met een korte
max-age(300 seconden, daarna een week), zonderincludeSubDomains. - Controleer elk subdomein (webmail, staging, extranet) voordat je
includeSubDomainstoevoegt. - Ga naar een jaar zodra alles stabiel is; vraag preloading pas als laatste aan.
- Zet de header op één plek (server, CDN of plugin) om twee tegenstrijdige waarden te voorkomen.
HSTS hoort bij de beveiligingsheaders die auditprogramma's controleren. Het effect op SEO is indirect, zoals het artikel HTTPS, HSTS en wat Google echt meeweegt uitlegt.
Veelgemaakte fouten
- Een jaar HSTS met
includeSubDomainsinschakelen terwijl een subdomein nog op HTTP draait: dat wordt onbereikbaar voor bezoekers die de header hebben ontvangen. - Denken dat je terug kunt door de optie uit te zetten: om HSTS uit te schakelen moet je
max-age=0via HTTPS versturen, wat een nog geldig certificaat vereist. - Het certificaat laten verlopen: met HSTS kan de bezoeker de waarschuwing niet meer omzeilen.
WP Masquerade Pro biedt HSTS als optie in het onderdeel Beveiligingsheaders, met een max-age van een jaar en nooit via HTTP verstuurd. De interface herinnert je eraan dat browsers de header blijven onthouden, ook na uitschakelen: zet het alleen aan op een site die blijvend op HTTPS draait.