Content Security Policy (CSP) is een krachtige beveiligingslaag die websites beschermt tegen verschillende soorten aanvallen, met name cross-site scripting (XSS) en data-injectie aanvallen. Het werkt als een whitelist-mechanisme waarbij je als website-eigenaar precies kunt specificeren welke bronnen (zoals scripts, stylesheets, afbeeldingen en andere content) geladen mogen worden op jouw website.
CSP wordt geïmplementeerd via HTTP-headers of HTML meta-tags en geeft browsers instructies over welke content vertrouwd en uitgevoerd mag worden. Door strikte regels in te stellen, kun je voorkomen dat kwaadaardige scripts worden uitgevoerd, zelfs als een aanvaller erin slaagt om code in je website te injecteren.
Hoe werkt Content Security Policy?
CSP werkt door middel van directives (richtlijnen) die je definieert in een HTTP-header of meta-tag. Deze directives specificeren voor verschillende content-types welke bronnen toegestaan zijn. Enkele belangrijke directives zijn:
- default-src: De standaard policy voor alle content-types die niet expliciet gedefinieerd zijn
- script-src: Bepaalt welke JavaScript-bronnen geladen mogen worden
- style-src: Controleert welke CSS-stylesheets toegestaan zijn
- img-src: Specificeert welke afbeeldingsbronnen geladen mogen worden
- connect-src: Regelt welke URLs benaderd mogen worden via fetch, XMLHttpRequest of WebSocket
- font-src: Bepaalt van welke bronnen lettertypen geladen mogen worden
Implementatie van CSP
Er zijn twee manieren om CSP te implementeren:
Via HTTP-header: Dit is de meest gebruikelijke en aanbevolen methode. Je configureert de webserver om een Content-Security-Policy header mee te sturen met elke response:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com; style-src 'self' 'unsafe-inline';
Via HTML meta-tag: Als je geen toegang hebt tot de serverconfiguratie, kun je CSP ook definiëren in de HTML:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted-cdn.com">
CSP-niveaus en reporting
CSP kent verschillende implementatieniveaus. CSP Level 1 biedt de basis-functionaliteit, terwijl CSP Level 2 en 3 uitgebreidere mogelijkheden bieden zoals nonces, hashes en stricter directives.
Een belangrijk aspect van CSP is de reporting-functionaliteit. Met de report-uri of report-to directive kun je schendingen van het beleid laten rapporteren naar een specifieke URL. Dit helpt bij het monitoren en verfijnen van je beveiligingsbeleid.
Voor testdoeleinden kun je ook Content-Security-Policy-Report-Only gebruiken, waarbij schendingen alleen gerapporteerd worden zonder dat de content daadwerkelijk geblokkeerd wordt.
