Webbeveiliging

HSTS

Definitie

HSTS (HTTP Strict Transport Security) is een HTTP-header die de browser opdraagt een site gedurende een bepaalde tijd alleen via HTTPS te benaderen. Na het eerste beveiligde bezoek wordt elk HTTP-adres vóór verzending omgezet naar HTTPS, en kun je certificaatfouten niet meer negeren.

HSTS, Webbeveiliging

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".

Tabel in drie kolommen: bij het eerste bezoek blijft het eerste HTTP-verzoek blootgesteld vóór de redirect en de ontvangst van de header; bij volgende bezoeken schakelt de browser zelf over op HTTPS en blokkeert hij certificaatfouten; met de preloadlijst geldt HTTPS al vanaf het allereerste bezoek, maar verwijderen duurt maanden
HSTS beschermt vanaf het tweede bezoek; alleen de preloadlijst dekt ook het eerste.

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.

Video: “hsts beveiliging tegen sslstrip aanvallen” (Mindert Aardema)

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.

  1. Begin met een korte max-age (300 seconden, daarna een week), zonder includeSubDomains.
  2. Controleer elk subdomein (webmail, staging, extranet) voordat je includeSubDomains toevoegt.
  3. Ga naar een jaar zodra alles stabiel is; vraag preloading pas als laatste aan.
  4. 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 includeSubDomains inschakelen 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=0 via 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.

Verder lezen

  • Artikel HTTPS, HSTS en beveiligingsheaders: waar Google echt rekening mee houdt
  • Pagina Beveiligingsheaders voor WordPress

Bronnen

  1. RFC 6797: HTTP Strict Transport Security (HSTS) (externe link, opent in een nieuw tabblad)
  2. MDN: Strict-Transport-Security (externe link, opent in een nieuw tabblad)
  3. HSTS Preload List Submission (externe link, opent in een nieuw tabblad)

Alle definities

WordPress-beveiliging, zonder ruis

Eén e-mail wanneer het ertoe doet: nieuw waargenomen aanvallen, updates van de plugin en praktische gidsen. Geen spam, afmelden met één klik.

Begin gratis, stap over op Pro wanneer je eraan toe bent

De gratis versie verbergt WordPress al en verplaatst de inlogpagina. Pro voegt aliassen, tweestapsverificatie en bewaking toe.