Terug naar blog
Web Security 28 Feb 2026 · 9 min lezen

Content Security Policy: Uw Browser als Schild tegen XSS

H

Hakobjan Dev Team

Security & Software Engineers

Cross-Site Scripting (XSS) blijft jaar na jaar in de OWASP Top 10 staan. Content Security Policy (CSP) is een krachtige HTTP-header die uw browser vertelt welke bronnen wel en niet geladen mogen worden. In dit artikel leert u hoe u CSP effectief implementeert, veelgemaakte fouten voorkomt en uw webapp beschermt tegen XSS-aanvallen.


Wat is Content Security Policy?

Content Security Policy is een W3C-standaard die via een HTTP-header of meta-tag aan de browser communiceert welke bronnen vertrouwd zijn. Wanneer een script, stylesheet of afbeelding van een niet-geautoriseerde bron probeert te laden, blokkeert de browser dit automatisch. Dit maakt CSP een van de krachtigste verdedigingsmechanismen tegen XSS, clickjacking en data-injectieaanvallen.

CSP werkt met directives zoals script-src, style-src, img-src en default-src die elk aangeven welke bronnen voor dat type content zijn toegestaan. U kunt specifieke domeinen whitelisten, nonces of hashes gebruiken voor inline scripts, en zelfs rapportage inschakelen om schendingen te monitoren zonder verkeer te blokkeren.

bash
# Voorbeeld CSP-header in Nginx
add_header Content-Security-Policy "
  default-src 'self';
  script-src 'self' 'nonce-abc123' https://cdn.example.com;
  style-src 'self' 'unsafe-inline';
  img-src 'self' data: https:;
  font-src 'self' https://fonts.gstatic.com;
  connect-src 'self' https://api.example.com;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self';
";

Veelgemaakte CSP-fouten en hoe ze te voorkomen

De meest voorkomende fout bij CSP-implementatie is het gebruik van unsafe-inline en unsafe-eval voor scripts. Deze directives ondermijnen het hele doel van CSP, omdat ze precies de aanvalsvectoren openlaten die CSP zou moeten blokkeren. Gebruik in plaats daarvan nonce-based of hash-based policies die specifieke inline scripts toestaan.

Een andere veelgemaakte fout is een te brede script-src directive, zoals het whitelisten van hele CDN-domeinen. Als een aanvaller een kwaadaardig script kan hosten op hetzelfde CDN, omzeilt hij uw CSP volledig. Gebruik strict-dynamic in combinatie met nonces voor een robuustere aanpak.

  • Vermijd unsafe-inline en unsafe-eval — gebruik nonces of hashes
  • Start met Content-Security-Policy-Report-Only om te testen zonder te blokkeren
  • Gebruik strict-dynamic voor compatibiliteit met moderne frameworks
  • Configureer report-uri of report-to voor continue monitoring
  • Vergeet frame-ancestors niet — het vervangt X-Frame-Options
  • Implementeer base-uri om base tag hijacking te voorkomen

CSP in productie: monitoring en iteratie

Een effectieve CSP is geen eenmalige configuratie maar een doorlopend proces. Begin met Content-Security-Policy-Report-Only om schendingen te verzamelen zonder functionaliteit te breken. Analyseer de rapporten, verfijn uw policy, en schakel pas over naar enforcement wanneer u zeker bent dat alle legitieme bronnen zijn toegestaan.

Gebruik tools zoals Google's CSP Evaluator of Report URI om uw policy te valideren en rapporten te aggregeren. In een CI/CD-pipeline kunt u automated tests toevoegen die controleren of de CSP-header aanwezig en correct is na elke deployment. Vergeet ook niet om uw CSP te updaten wanneer u nieuwe third-party services integreert.

Pro Tip

Begin vandaag met het toevoegen van een Content-Security-Policy-Report-Only header aan uw applicatie. Gebruik een nonce-based aanpak voor scripts en configureer report-to om schendingen te monitoren. Binnen een week heeft u voldoende data om een strikte CSP in te voeren die 90% van alle XSS-aanvallen blokkeert.

Deel dit artikel

Alle artikelen