Naar hoofdinhoud
EU-webbeveiliging: in 10 stappen naar een betere rating · Part 1

HSTS in 5 minuten: waarom 72% van de EU-websites hun gebruikers onbeschermd laat

HTTP Strict Transport Security voorkomt downgrade-aanvallen — en ontbreekt op drie van de vier Europese websites. Zo schakelt u het in.

· SiteGuardian

Deel 1 van de serie "EU-webbeveiliging: in 10 stappen naar een betere rating"


Het probleem in 30 seconden

Uw website heeft een TLS-certificaat. Mooi. Maar als een gebruiker http://uw-domein.com intypt — wat gebeurt er dan?

Zonder HSTS: de browser maakt een onversleutelde verbinding. De site stuurt door naar HTTPS. Maar in de milliseconden tussen het HTTP-verzoek en de doorverwijzing kan een aanvaller op hetzelfde netwerk (wifi in een koffiebar, luchthaven, hotel) de verbinding kapen. Man-in-the-middle, cookiediefstal, sessiekaping — allemaal triviaal.

Met HSTS: de browser weet al dat dit domein alleen HTTPS accepteert. Hij maakt direct een versleutelde verbinding. Geen HTTP-verzoek, geen doorverwijzing, geen aanvalsvenster.

Eén header. Eén regel. En 72,4% van de Europese websites heeft het niet.


Wat de data laat zien

Uit de SiteGuardian Benchmark over meer dan 700.000 Europese websites:

  • 27,6% heeft HSTS ingeschakeld
  • 75,7% stuurt door naar HTTPS — maar zonder HSTS is de doorverwijzing aanvalbaar
  • 24,3% stuurt niet eens door, ondanks een geldig certificaat

Dat betekent: drie op de vier websites met een TLS-certificaat gebruiken het niet consequent. Het certificaat is er, de bescherming niet.


Wat is HSTS precies?

HTTP Strict Transport Security (RFC 6797) is een HTTP-antwoordheader die de browser vertelt:

"Maak de komende X seconden uitsluitend verbinding via HTTPS met dit domein. Negeer HTTP volledig."

De header ziet er zo uit:

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • max-age=31536000 — 1 jaar (in seconden). De browser onthoudt de instructie zo lang.
  • includeSubDomains — geldt voor alle subdomeinen (api.uw-domein.com, mail.uw-domein.com, enz.)

Na het eerste bezoek maakt de browser bij elk volgend verzoek direct verbinding via HTTPS — zonder de omweg via HTTP.


Hoe u HSTS inschakelt

Apache (.htaccess of vhost.conf)

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Vereiste: mod_headers moet ingeschakeld zijn.

Nginx

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

De always aan het einde zorgt ervoor dat de header ook op foutpagina's (4xx, 5xx) wordt verstuurd.

Caddy

Caddy stelt HSTS automatisch in wanneer HTTPS actief is. U hoeft niets te doen.

Node.js / Express

app.use((req, res, next) => {
  res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
  next();
});

Of met het helmet-pakket:

const helmet = require('helmet');
app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true }));

WordPress

De plugin "Really Simple SSL" of "HTTP Headers" schakelt HSTS in met één klik. U kunt het ook toevoegen aan .htaccess (zie Apache hierboven).

Beheerde hosting (Cloudflare, AWS, Platform.sh, enz.)

De meeste hostingproviders stellen HSTS niet standaard in. Kijk in uw dashboard onder "SSL/TLS-instellingen" of "HTTP-headers". Als de optie niet beschikbaar is, maak dan een .htaccess-bestand aan in de webroot.


Drie fouten om te vermijden

1. Een te korte max-age instellen

max-age=86400 (1 dag) beschermt alleen gebruikers die de afgelopen 24 uur hebben bezocht. Begin met 30 dagen (2592000) en verhoog naar 1 jaar (31536000) zodra alles werkt.

2. includeSubDomains vergeten

Zonder includeSubDomains blijven uw subdomeinen bereikbaar via HTTP. Als mail.uw-domein.com of intranet.uw-domein.com geen TLS hebben, voeg includeSubDomains pas toe als alle subdomeinen HTTPS ondersteunen — anders gaan ze stuk.

3. HSTS inschakelen zonder werkende HTTPS-doorverwijzing

HSTS vereist dat uw website daadwerkelijk bereikbaar is via HTTPS. Test voordat u het inschakelt: navigeer naar https://uw-domein.com. Ziet u een foutmelding, corrigeer dan eerst de TLS-certificaatconfiguratie.


HSTS Preload: de volgende stap

Zodra HSTS werkt en u er zeker van bent dat alle subdomeinen HTTPS ondersteunen, vraag opname aan in de HSTS-preloadlijst:

  1. Stel de header in op: max-age=31536000; includeSubDomains; preload
  2. Dien uw domein in op: hstspreload.org

De preloadlijst is ingebouwd in Chrome, Firefox, Safari en Edge. Domeinen op de lijst worden altijd via HTTPS geladen — zelfs bij het allereerste bezoek, voordat de browser de HSTS-header ooit heeft gezien.


Hoe NIS2 en de AVG hierbij aansluiten

HSTS wordt in geen enkele wet bij naam genoemd. Maar:

  • NIS2 Art. 21(2)(d) vereist "beveiliging bij de acquisitie, ontwikkeling en het onderhoud van netwerk- en informatiesystemen, met inbegrip van de behandeling en openbaarmaking van kwetsbaarheden". Een ontbrekende HSTS-header is een bekende, triviaal exploiteerbare kwetsbaarheid.

  • AVG Art. 32 vereist "passende technische maatregelen" om persoonsgegevens te beschermen. Transportversleuteling zonder HSTS is als een slot zonder grendel — het ziet er veilig uit, maar kan met één beweging worden geopend.


Controleer uw domein

Schakel HSTS in, wacht 5 minuten en scan uw domein:

https://siteguardian.io/scan

De scan laat u direct zien of HSTS correct is ingesteld, of includeSubDomains actief is en of uw domein in aanmerking komt voor de preloadlijst.


Volgende week in Deel 2: DMARC — van none naar reject. Waarom policy=none niemand beschermt en hoe u in drie stappen een effectief DMARC-beleid bereikt.

Dit artikel maakt deel uit van de serie "EU-webbeveiliging: in 10 stappen naar een betere rating". Data uit de SiteGuardian EU Web Security Benchmark over meer dan 700.000 Europese websites.

How does your website compare?

SiteGuardian scans your domain across six security dimensions — free, instant, no registration.

Scan your website

EU-webbeveiliging: in 10 stappen naar een betere rating

This article is part of a weekly series on EU web security best practices.

SiteGuardian

2026-04-13

RSS