Wat zijn beveiligingsheaders?
Security headers zijn HTTP-responsheaders die browsers instrueren hoe zij de inhoud van een website moeten behandelen. Daarmee versterken ze de bescherming tegen veelvoorkomende kwetsbaarheden in webapplicaties. Deze headers helpen aanvallen zoals cross-site scripting (XSS), clickjacking, contentinjectie en protocoldegradatie te voorkomen. Correct geconfigureerde beveiligingsheaders vormen een essentieel onderdeel van een gelaagde beveiligingsstrategie.Essentiële beveiligingsheaders
Strict-Transport-Security (HSTS) afdwingen
Dwingt HTTPS-verbindingen af:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- Voorkomt aanvallen waarbij het protocol wordt gedegradeerd
- Blokkeert gemengde inhoud
- Beschermt tegen SSL-stripping
Content-Security-Policy (CSP) voor bronnen
Regelt het laden van resources:
Content-Security-Policy: default-src 'self'; script-src 'self' trusted.com; style-src 'self' 'unsafe-inline'
- Voorkomt XSS-aanvallen
- Beperkt waar scripts vandaan mogen komen
- Blokkeert niet-geautoriseerde resources
X-Frame-Options tegen framing
Voorkomt clickjacking:
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
- Voorkomt dat de site in een frame wordt opgenomen
- Beschermt tegen misleiding van de gebruikersinterface
X-Content-Type-Options tegen MIME-sniffing
Voorkomt MIME-sniffing:
X-Content-Type-Options: nosniff
- Dwingt de browser de gedeclareerde Content-Type te respecteren
- Voorkomt scriptinjectie via verkeerd geïnterpreteerde bestanden
Aanvullende beveiligingsheaders
| Header | Doel | Voorbeeldwaarde |
|---|---|---|
| X-XSS-Protection | XSS-filter (verouderd) | 1; mode=block |
| Referrer-Policy | Informatie over de verwijzer beheren | strict-origin-when-cross-origin |
| Permissions-Policy | Functies beperken | geolocation=(), camera=() |
| Cross-Origin-Opener-Policy | Procesisolatie | same-origin |
| Cross-Origin-Embedder-Policy | Resource-isolatie | require-corp |
Voorbeelden van implementatie
Nginx-configuratie
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'" always;
Apache-configuratie
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Beveiligingsheaders en domeingezondheid
Waarom headers belangrijk zijn voor domeinen
- Bescherm gebruikers die uw domein bezoeken
- Voorkom schade aan de reputatie van uw domein
- Help aan nalevingsvereisten te voldoen
- Verdedig tegen veelvoorkomende aanvallen
Beveiligingsheaders testen
Hulpmiddelen om de implementatie te controleren:
- securityheaders.com
- Mozilla Observatory
- SSL Labs
- Het tabblad Network van Chrome DevTools
Beste praktijken
1. Begin met HSTS: essentieel om HTTPS af te dwingen
2. Voer CSP geleidelijk in: begin met de modus report-only
3. Test grondig: headers kunnen functionaliteit verbreken
4. Gebruik preloadlijsten: dien de site in bij browser-preloadlijsten
5. Monitor schendingen: gebruik CSP-rapportage-eindpunten
6. Voer regelmatig audits uit: beveiligingsvereisten veranderen
Veelgebruikte beoordelingscriteria
| Score | Typische vereisten |
|---|---|
| A+ | Alle kritieke headers, HSTS-preload |
| A | HSTS, CSP, X-Frame-Options, X-Content-Type |
| B | Enkele headers ontbreken |
| C/D | Minimale beveiligingsheaders |
| F | Geen beveiligingsheaders |
Beveiligingsheaders vormen een kritieke laag van webapplicatiebeveiliging. Ze bieden browserafgedwongen bescherming die de beveiligingsmaatregelen aan de serverzijde aanvult.