Security headers: zo haal je een A.
Security headers zijn regels die je server meestuurt, zodat de browser je bezoekers beschermt tegen onder meer ingevoegde scripts. Voor een A op securityheaders.com stuur je zes headers mee. De moeilijkste is Content-Security-Policy: die kan zonder melding een knop kapotmaken, dus test die goed.
De zes headers, zoals ze op xwise.nl staan
Dit is wat onze eigen site op 1 november 2026 meestuurt, ingekort. Meet het zelf op securityheaders.com. Dit hoort bij het WordPress-alternatief, maar het werkt op elke site, ook op WordPress.
| Header | Onze waarde | Wat hij doet |
|---|---|---|
| Strict-Transport-Security | max-age=63072000; includeSubDomains; preload | Alleen nog HTTPS, twee jaar lang |
| Content-Security-Policy | default-src 'self'; en een hash per script | Bepaalt welke scripts en bronnen mogen laden |
| X-Frame-Options | DENY | Je site mag niet in een frame van een ander |
| X-Content-Type-Options | nosniff | De browser raadt geen bestandstype |
| Referrer-Policy | strict-origin-when-cross-origin | Andere sites zien alleen je domein, niet de hele URL |
| Permissions-Policy | geolocation=(), microphone=(), camera=(), browsing-topics=() | Zet browserfuncties uit die je niet gebruikt |
De score loopt van A+ tot F, en voor een A+ moeten alle headers die de scanner zoekt aanwezig zijn, volgens de uitleg van de maker. Hoe de scanner precies weegt, verandert af en toe. Meet dus zelf in plaats van een oude lijst te volgen.
XINNO: van F naar A
Op 21 mei 2026 gaf securityheaders.com de oude site van XINNO, op WordPress, een F: alle zes de headers ontbraken. Voor een IT-bedrijf dat kantoren beveiligt, was dat een zwakke plek. Op 17 augustus 2026 stond de nieuwe site op A, en op 30 oktober gaf de MDN HTTP Observatory A+ met 12 van de 12 tests.
XINNO stuurt nu geen X-Frame-Options mee, maar gebruikt in de Content-Security-Policy de regel frame-ancestors, omdat het eigen beheerscherm de site in een frame moet kunnen tonen. Dat doet hetzelfde en is flexibeler. Een letterlijke kopie van onze tabel was daar dus fout geweest. Lees de case.
De valkuil: een script dat stil wordt geblokkeerd
Staat een script niet in je Content-Security-Policy, dan blokkeert de browser het zonder melding op de pagina. Alles ziet er goed uit, en de knop doet niets. Dat zagen we op meerdere sites, en het is niet te zien in de code of de build.
- Begin met report-only. De header Content-Security-Policy-Report-Only meldt wat er geblokkeerd zou worden, zonder iets te breken. Zie MDN.
- Lees de console en klik alles door. Formulier, menu, cookiebanner, analytics.
- Gebruik een hash of nonce voor eigen scripts. Bij ons maakt de build bij elke deploy de lijst met hashes opnieuw, zodat die niet achterloopt.
- Zet hem dan pas aan, en meet opnieuw. Meet na elke deploy, niet eenmalig.
Waar zet je ze neer?
- Cloudflare Pages: een bestand _headers, of een Function als je hashes genereert.
- WordPress: via de server (.htaccess of nginx) of via je hostingpartij. Plugins bestaan ook, maar dan is er weer een plugin om bij te houden.
- Wix of Squarespace: je hebt er weinig invloed op. Dat is een afweging bij het kiezen.
Wat headers niet doen
Een A betekent niet dat je site veilig is. Headers beschermen vooral de bezoeker in de browser. Ze houden geen lek in een plugin tegen, en daar zit de meeste ellende: zie WordPress beveiliging. Ook een stap verder gaat het om de basis: wie de updates doet. En is het al misgegaan, lees dan WordPress gehackt: wat nu?.
De headers zie je niet op het scherm, en daardoor ontbreken ze vaak: de gratis website analyse laat zien welke jij hebt. Bij Xwise gaat je site live met score A, anders krijg je je geld terug. Vraag je eigen homepage aan.
Alle bronnen. Lees het zelf na.
- securityheaders.com XINNO, gemeten, 17-08-2026
- Scott Helme maker van securityheaders.com, over de beoordeling scotthelme.co.uk
- MDN Content Security Policy developer.mozilla.org
- MDN HTTP Observatory XINNO, gemeten, 30-10-2026 developer.mozilla.org