Security headers: wat ze doen en hoe je ze instelt
Security headers zijn instructies die je server meestuurt aan de browser. Ze maken bekende aanvallen, zoals clickjacking en het injecteren van scripts, een stuk lastiger. Ze zijn één laag van de beveiliging: ontbrekende headers maken een site niet onveilig, en aanwezige headers bewijzen niet dat hij veilig is.
De vijf headers die SteadyHost controleert
- Strict-Transport-Security (HSTS): browsers openen je site voortaan alleen nog via HTTPS. Werkt alleen als HTTPS overal goed werkt.
- Content-Security-Policy (CSP): bepaalt van welke bronnen scripts, styles en afbeeldingen mogen komen. De krachtigste header tegen het injecteren van scripts (XSS).
- X-Content-Type-Options: nosniff voorkomt dat browsers bestanden als een ander type interpreteren dan de server opgeeft.
- Referrer-Policy: bepaalt hoeveel van het huidige adres wordt meegestuurd naar andere websites.
- Permissions-Policy: zet browserfuncties uit die je site niet gebruikt, zoals camera, microfoon en locatie.
Headers instellen in nginx
Begin met de headers die vrijwel nooit iets breken. Deze voorbeeldwaarden zijn veilig voor de meeste websites.
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), geolocation=(), microphone=()" always;Headers instellen in Apache
Gebruik je Apache, dan zet je dezelfde headers in .htaccess. Bij een CDN zoals Cloudflare, of bij een hostingpaneel, kan het vaak ook via de instellingen.
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), geolocation=(), microphone=()"Content-Security-Policy stap voor stap
Een Content-Security-Policy moet passen bij de scripts, lettertypen en diensten die je website gebruikt (zoals analytics, chat of een betaalprovider). Een te strenge policy breekt onderdelen van je site.
Begin daarom met Content-Security-Policy-Report-Only: de browser meldt dan wat hij zou blokkeren, zonder iets te blokkeren. Pas als er geen onverwachte meldingen meer zijn, zet je de policy echt aan.
Content-Security-Policy: default-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'none'; base-uri 'self'Hoe SteadyHost security headers beoordeelt
- In orde: alle vijf de headers zijn aanwezig.
- Aandachtspunt: een deel ontbreekt. Een CSP in report-only-modus telt nog niet als aanwezig, en HSTS telt alleen via HTTPS.
- Probleem: geen van de vijf headers is aanwezig.
Controleer je eigen website
SteadyHost controleert Security headers en de rest van de technische basis van je website in enkele seconden.