De HSTS-koptekst (HTTP Strict Transport Security) vertelt browsers alleen via HTTPS verbinding te maken met uw WordPress-site. Zonder deze koptekst zouden bezoekers per ongeluk op een onveilige HTTP-versie van uw pagina kunnen belanden, waardoor zij kwetsbaar zijn voor man-in-the-middle-aanvallen. Eenmaal ingesteld onthouden browsers uw voorkeur en upgraden zij elk verzoek automatisch naar HTTPS gedurende de door u opgegeven periode.
Wat doet de HSTS-koptekst eigenlijk?
Wanneer een browser de Strict-Transport-Security-koptekst ontvangt, slaat hij die informatie lokaal op. Voor elk toekomstig bezoek binnen het opgegeven max-age-venster zal de browser weigeren via gewone HTTP te verbinden. Hij doet zelfs geen poging eerst een HTTP-verbinding op te zetten; hij gaat direct naar HTTPS. Dit elimineert het korte venster waarin een aanvaller het initiële HTTP-verzoek kan onderscheppen en de gebruiker naar een kwaadaardige pagina kan doorsturen.
De koptekst heeft drie hoofdparameters:
- max-age: hoe lang (in seconden) de browser zich moet herinneren HTTPS te forceren. Een waarde van
31536000komt overeen met één jaar. - includeSubDomains: past de regel ook toe op elk subdomein (bijv. blog.example.com, shop.example.com).
- preload: signaleert dat u uw domein wilt opnemen in de ingebouwde HSTS-preload-lijst van de browser, zodat het allereerste bezoek ook beschermd is.
Voor u begint: zorg dat HTTPS overal werkt
Deze stap is essentieel. Zodra HSTS actief is, laten browsers bezoekers niet terugvallen op HTTP. Is uw SSL-certificaat verlopen, verkeerd geconfigureerd of ontbreekt het op een subdomein, dan worden die pagina's gedurende uw max-age-instelling volledig onbereikbaar. Verifieer voor het inschakelen het volgende:
- Uw SSL-certificaat is geldig en niet bijna verlopen.
- Alle pagina's op uw site laden correct via
https://. - Er zijn geen mixed-content-waarschuwingen in de browserconsole (HTTP-bronnen geladen op HTTPS-pagina's).
- Bent u van plan
includeSubDomainste gebruiken, dan moet elk subdomein een geldig certificaat hebben en inhoud via HTTPS aanbieden. - Uw WordPress Site-URL en WordPress-adres (in Instellingen > Algemeen) gebruiken beide
https://.
HSTS toevoegen via Apache .htaccess
Draait uw WordPress-site op Apache (de meeste shared hostingproviders gebruiken Apache), dan kunt u de koptekst direct toevoegen in het .htaccess-bestand in uw WordPress-hoofdmap. Open het bestand met een teksteditor of de bestandsbeheerder van uw hostingprovider, en voeg het volgende blok toe vóór de # BEGIN WordPress-sectie:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>De IfModule-wrapper zorgt ervoor dat Apache deze richtlijn alleen verwerkt als mod_headers ingeschakeld is. Op de meeste hosts is het standaard ingeschakeld, maar de wrapper voorkomt een 500-fout op servers waar het niet beschikbaar is.
HSTS toevoegen via Nginx
Voor Nginx-gebaseerde hosting (gangbaar bij managed WordPress-hosts zoals Kinsta, Cloudways of SpinupWP) voegt u de koptekst toe binnen uw server-blok. Het configuratiebestand bevindt zich doorgaans op /etc/nginx/sites-available/yourdomain.com of in een aangepaste Nginx-include-map die door uw host wordt aangeboden:
server {
listen 443 ssl;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# ... rest of your server config
}Het sleutelwoord always aan het einde is belangrijk. Zonder dit verstuurt Nginx de koptekst alleen bij geslaagde (2xx) responses. Met always wordt deze ook bij foutpagina's (4xx, 5xx) opgenomen, wat het juiste gedrag is voor beveiligingskoptekst-en.
Test en herlaad Nginx na het bewerken van de config:
sudo nginx -t
sudo systemctl reload nginxHSTS toevoegen via PHP in functions.php
Heeft u geen toegang tot serverconfiguratiebestanden (sommige managed hosts beperken dit), dan kunt u de koptekst vanuit PHP versturen. Voeg het volgende toe aan het functions.php-bestand van uw actieve thema, of beter nog, aan een site-specifieke plug-in zodat het thema-updates overleeft:
function iwp_add_hsts_header() {
if ( ! is_admin() ) {
header( 'Strict-Transport-Security: max-age=31536000; includeSubDomains; preload' );
}
}
add_action( 'send_headers', 'iwp_add_hsts_header' );Houd er rekening mee dat PHP-gebaseerde koptekst-en alleen gelden voor pagina's die door WordPress worden verwerkt. Statische bestanden (afbeeldingen, CSS, JS) die direct door Apache of Nginx worden geserveerd, dragen deze koptekst niet. Voor volledige dekking is de aanpak op serverniveau altijd beter.
Een WordPress-plug-in gebruiken om HSTS in te stellen
Geeft u de voorkeur aan een no-code-aanpak, dan kunnen verschillende plug-ins HSTS voor u afhandelen:
- Really Simple SSL (Pro): de Pro-versie bevat een module voor beveiligingskoptekst-en waarmee u HSTS kunt inschakelen en
max-ageenincludeSubDomainsvanuit het dashboard kunt configureren. - HTTP Headers: een gratis plug-in die u een UI biedt om diverse beveiligingskoptekst-en in te stellen, waaronder Strict-Transport-Security.
- Headers Security Advanced & HSTS WP: speciaal gebouwd voor beveiligingskoptekst-en met een eenvoudige schakelaar voor HSTS en preload.
Plug-ins zijn handig, maar zij voegen een extra afhankelijkheid toe. Wordt de plug-in gedeactiveerd of verwijderd, dan verdwijnen ook uw koptekst-en. Voor iets fundamenteels als HSTS is een configuratie op serverniveau betrouwbaarder.
Veilige uitrolstrategie: klein beginnen, dan opvoeren
Direct overschakelen op een max-age van een jaar is riskant als u niet alles heeft getest. Gaat er iets mis, dan blijven browsers HTTPS een heel jaar afdwingen, en is er geen manier om de koptekst aan de serverzijde "ongedaan te maken" zodra een browser deze heeft gecachet. Volg in plaats daarvan deze geleidelijke aanpak:
- 5 minuten: stel
max-age=300in en surf door uw site. Controleer of elke pagina laadt, formulieren correct verzonden worden en geen mixed-content-waarschuwingen verschijnen. - 1 dag: verhoog naar
max-age=86400. Laat het een dag of twee draaien terwijl u uw site monitort. - 1 week: ga naar
max-age=604800. Op dit punt zou u erop moeten kunnen vertrouwen dat HTTPS overal werkt. - 1 jaar: stel de uiteindelijke waarde van
max-age=31536000in. Dit is het minimum dat vereist is voor inzending in de HSTS-preload-lijst. - Voeg includeSubDomains toe: doe dit pas wanneer is bevestigd dat alle subdomeinen op HTTPS werken.
- Voeg preload toe: voeg de
preload-vlag toe en dien uw domein in op hstspreload.org.
Uw site indienen bij de HSTS-preload-lijst
De HSTS-preload-lijst is een register van domeinen waarmee browsers worden uitgeleverd met ingebouwde HSTS-handhaving. Dit betekent dat zelfs het allereerste bezoek aan uw site via HTTPS verloopt, voordat de browser ooit uw koptekst heeft gezien. Om in aanmerking te komen, dient uw site aan deze eisen te voldoen:
- Een geldig SSL-certificaat aanbieden.
- Al het HTTP-verkeer doorsturen naar HTTPS op dezelfde host.
- De
Strict-Transport-Security-koptekst versturen met eenmax-agevan minimaal31536000(één jaar). - De
includeSubDomains-richtlijn opnemen. - De
preload-richtlijn opnemen.
Bezoek hstspreload.org, voer uw domein in en dien in. Houd er rekening mee dat verwijdering uit de preload-lijst maanden duurt en een browserupdatecyclus vereist, dus dien alleen in wanneer u zich volledig committeert aan HTTPS.
Hoe u uw HSTS-koptekst verifieert met de browser-DevTools
Na het toevoegen van de koptekst kunt u snel bevestigen dat deze werkt:
- Open uw site in Chrome of Firefox.
- Druk op F12 om DevTools te openen.
- Ga naar het tabblad Network en herlaad de pagina.
- Klik op het hoofddocumentverzoek (meestal het eerste).
- Scroll omlaag naar Response Headers.
- Zoek naar
Strict-Transport-Security. U dient uw geconfigureerde waarde te zien.
U kunt ook vanaf de commandoregel controleren:
curl -sI https://example.com | grep -i strict-transportVerschijnt de koptekst niet, controleer dan of u de HTTPS-versie bezoekt (niet HTTP) en of uw serverconfiguratiewijzigingen zijn opgeslagen en herladen.
Veelvoorkomende HSTS-fouten en hoe deze te vermijden
- HSTS instellen op HTTP-responses: de koptekst wordt door browsers genegeerd wanneer deze via gewone HTTP wordt aangeleverd. Hij heeft alleen effect op HTTPS-responses.
- Statische bestanden vergeten: stelt u HSTS via PHP in, dan omzeilen statische bestanden WordPress en dragen de koptekst niet. Gebruik configuratie op serverniveau voor volledige dekking.
- includeSubDomains gebruiken zonder subdomeinen te controleren: heeft u een subdomein dat geen HTTPS ondersteunt (bijv. een oude staging-server), dan wordt deze ontoegankelijk.
- Te snel naar een lange max-age springen: begin altijd met een korte duur en bouw langzaam op.
- Vergeten uw SSL-certificaat te verlengen: met HSTS actief en een verlopen certificaat is uw site volledig onbereikbaar. Stel automatische verlenging in met Let's Encrypt of uw certificaataanbieder.
Verifieer uw HSTS-opzet met InspectWP
Voer na het toevoegen van de koptekst een nieuwe InspectWP-scan op uw site uit. De sectie beveiligingskoptekst-en in uw rapport toont de status van de Strict-Transport-Security-koptekst. Is alles correct geconfigureerd, dan verschijnt deze als groen (aanwezig). Heeft u ook andere beveiligingskoptekst-en ingesteld, controleer die dan ook om een compleet beeld te krijgen van de beveiligingsstatus van uw site.