Je website heeft een SSL-certificaat, je software is up-to-date en je wachtwoorden zijn sterk. Maar heb je ook je security headers geconfigureerd? Bij meer dan 60% van de websites die wij scannen ontbreken essentiële security headers. Het goede nieuws: ze zijn in een kwartier ingesteld en beschermen tegen hele categorieën aanvallen — van clickjacking tot cross-site scripting.
Wat zijn security headers?
Security headers zijn instructies die je webserver meestuurt bij elk HTTP-antwoord. Ze vertellen de browser van je bezoeker hoe die zich moet gedragen: welke content mag worden geladen, of de pagina in een iframe mag worden getoond, of cookies alleen via HTTPS mogen worden verstuurd. Zonder deze headers bepaalt de browser zelf wat er mag — en dat is vaak te ruim.
Je kunt security headers controleren door in je terminal het volgende commando uit te voeren:
curl -sI https://www.jouwdomein.nl | grep -iE "strict-transport|content-security|x-frame|x-content-type|referrer-policy|permissions-policy"
Krijg je weinig of geen resultaten terug? Dan zijn je security headers niet geconfigureerd.
De 7 essentiële security headers
1. Strict-Transport-Security (HSTS)
HSTS dwingt browsers om alleen via HTTPS te communiceren met je website. Zonder HSTS kan een aanvaller een bezoeker omleiden naar een HTTP-versie van je site en verkeer onderscheppen (man-in-the-middle aanval).
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age=31536000 — browser onthoudt dit 1 jaar
includeSubDomains — geldt ook voor subdomeinen
preload — laat je site opnemen in de HSTS preload list van browsers
2. Content-Security-Policy (CSP)
De krachtigste maar ook meest complexe header. CSP bepaalt welke bronnen (scripts, stylesheets, afbeeldingen, fonts) je pagina mag laden. Dit is je belangrijkste verdediging tegen Cross-Site Scripting (XSS) aanvallen.
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com
Begin met een basisbeleid en breid het uit op basis van wat je website nodig heeft. Tip: gebruik Content-Security-Policy-Report-Only om eerst te testen zonder content te blokkeren.
Bij Cobytes configureren we CSP standaard voor al onze managed hosting klanten. We monitoren CSP-violations via een report-uri zodat we snel kunnen reageren als er iets misgaat.
3. X-Content-Type-Options
Voorkomt dat browsers het MIME-type van een bestand raden (MIME-sniffing). Zonder deze header kan een aanvaller een kwaadaardig script uploaden als afbeelding, waarna de browser het toch als script uitvoert.
X-Content-Type-Options: nosniff
Eén regel, geen configuratie nodig. Geen reden om dit niet in te stellen.
4. X-Frame-Options
Bepaalt of je pagina in een iframe mag worden getoond. Zonder deze header kan een aanvaller je site in een onzichtbare iframe laden en bezoekers misleiden om op verkeerde knoppen te klikken (clickjacking).
X-Frame-Options: SAMEORIGIN
DENY — pagina mag nooit in een iframe
SAMEORIGIN — alleen iframes van je eigen domein (aanbevolen)
5. Referrer-Policy
Bepaalt hoeveel informatie je browser deelt over de vorige pagina wanneer een bezoeker op een link klikt. Zonder deze header lekt je website mogelijk gevoelige URL-parameters naar externe sites.
Referrer-Policy: strict-origin-when-cross-origin
Dit stuurt alleen het domein (niet het volledige pad) naar externe sites, en het volledige pad alleen naar je eigen domein.
6. Permissions-Policy
Bepaalt welke browser-API’s je website mag gebruiken: camera, microfoon, geolocatie, betaalmethoden. Schakel alles uit wat je niet gebruikt — zo voorkom je dat kwaadaardige scripts deze functies misbruiken.
Permissions-Policy: geolocation=(), microphone=(), camera=(), payment=(), usb=()
7. X-XSS-Protection
Deze header activeerde de ingebouwde XSS-filter van oudere browsers. Moderne browsers hebben dit filter verwijderd ten gunste van CSP. De aanbevolen instelling is nu:
X-XSS-Protection: 0
Ja, je leest het goed: 0 is nu de juiste waarde. De oude XSS-filter bleek zelf kwetsbaarheden te introduceren. Gebruik CSP in plaats daarvan.
Hoe stel je security headers in?
De configuratie verschilt per webserver. Hier zijn de meest voorkomende:
Nginx
Voeg de headers toe aan je server- of location-blok:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()" always;
add_header X-XSS-Protection "0" always;
Apache (.htaccess)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()"
Header always set X-XSS-Protection "0"
Controleren of het werkt
Na het instellen kun je je headers controleren:
$ curl -sI https://www.cobytes.com | grep -iE "strict|content-security|x-frame|x-content|referrer|permissions"
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
referrer-policy: same-origin
permissions-policy: geolocation=(), microphone=(), camera=(), payment=(), usb=(), magnetometer=(), gyroscope=(), accelerometer=()
Alle 7 headers aanwezig. Zo hoort het.
Veelgemaakte fouten
- Te strenge CSP zonder testen — een verkeerd geconfigureerde CSP breekt je website. Test altijd eerst met
Report-Only modus.
- Headers alleen op de homepage — security headers moeten op alle pagina’s staan, inclusief API-endpoints en admin-pagina’s.
- Dubbele headers — als je webserver én je applicatie headers instellen, krijg je dubbele waarden die conflicteren. Kies één plek.
- HSTS te snel op preload zetten — zodra je in de preload list staat, kun je niet meer terug naar HTTP. Zorg eerst dat alles werkt.
Meer over website security
Waarom dit ertoe doet
Security headers zijn de laagdrempeligste beveiligingsmaatregel die er bestaat. Ze kosten niets, zijn in minuten ingesteld, en beschermen tegen aanvallen die dagelijks plaatsvinden. Toch ontbreken ze bij het overgrote deel van de websites — simpelweg omdat niemand eraan denkt.
Bij Cobytes Managed Hosting configureren we alle security headers standaard voor onze klanten. Inclusief een op maat gemaakte Content-Security-Policy die past bij de specifieke services die je website gebruikt — van analytics tot chat widgets.
Wil je weten of jouw website de juiste security headers heeft? Neem contact met ons op voor een security check — we vertellen je precies wat er mist en helpen je bij het instellen.