Een Content Security Policy (CSP) is een regel die de browser vertelt van welke plekken jouw pagina bestanden en scripts mag laden. Zo houd je ongewenste code buiten je pagina. Het is een extra beschermlaag, geen vervanging voor updates.
Wat is een Content Security Policy?
Probeert iets op de pagina code te laden van een bron die niet op de lijst staat, dan weigert de browser dat. Daarmee is een CSP een van de weinige beschermingen die nog helpt als een aanvaller toch een schadelijk script op je site heeft weten te zetten.
Een CSP stuurt je server mee als response headerEen HTTP-header is een regel met extra informatie die de browser van je bezoeker en de server van je website achter de schermen naar elkaar sturen., daarom hoort hij bij de securityheadersSecurityheaders zijn instructies die je website meestuurt en waarmee de browser van je bezoeker extra beveiligingsregels toepast.. De waarde is een lijst met regels die directives heten. default-src bepaalt de standaard voor alles, script-src regelt waar scripts vandaan mogen komen, img-src doet hetzelfde voor afbeeldingen, enzovoort. Elke directive bevat de toegestane bronnen, bijvoorbeeld je eigen domeinEen domeinnaam is het webadres waarmee bezoekers jouw website vinden, zoals bedrijfsnaam.nl. of een genoemde externe dienst.
De browser past de regels toe terwijl hij de pagina opbouwt. Een CSP is dus een tweede verdedigingslinie. Hij haalt de zwakke plek zelf niet weg, maar kan voorkomen dat een ingespoten script draait of gegevens naar de server van een vreemde stuurt.
Wat een CSP betekent voor een PHP- of WordPress-site
Het klassieke probleem waartegen een CSP helpt is cross-site scriptingCross-site scripting (XSS) is een aanval waarbij iemand een schadelijk script op jouw pagina zet dat meedraait in de browser van je bezoekers.: een aanvaller laat zijn eigen script draaien in de browser van jouw bezoekers. Op een PHP-site met veel plugins zijn er genoeg plekken waar dat mis kan gaan, en een CSP maakt de gevolgen van een geslaagde poging kleiner.
Het addertje is dat WordPressWordPress is een programma waarmee je een website maakt en beheert zonder te hoeven programmeren. vol zit met inline scripts, inline stijlen en bestanden van andere domeinen. Een strikte policy blokkeert dat allemaal tenzij je het toestaat. Een CSP toevoegen aan een bestaande site is dus een project van testen en bijstellen. Een te losse policy beschermt weinig, een te strakke breekt formulieren, menu’s of meetscripts.
Een statische websiteEen statische website bestaat uit kant-en-klare pagina's die de server alleen hoeft af te geven, zonder dat er bij elk bezoek iets wordt berekend. is een ander startpunt. Zonder PHP en database die bij een paginaweergave draaien, is de pagina een vaste set bestanden en kun je meestal precies opsommen welke bronnen nodig zijn. Dat is een van de redenen dat we een website zonder PHP als optie bieden.
Zo probeer je een CSP veilig uit
Browsers kennen een report-only-modus via de header Content-Security-Policy-Report-Only. Daarin wordt niets geblokkeerd, maar de browser noteert wat de policy zou hebben geblokkeerd. Die meldingen lees je in de console van de ontwikkeltools.
Een verstandige volgorde:
- Bekijk je huidige headers om te zien of er al een CSP is.
- Zet een conceptpolicy in report-only-modus.
- Klik door je eigen site, inclusief formulieren en afrekenen, en noteer elke waarschuwing.
- Voeg de bronnen toe die je vertrouwt, haal weg wat je niet nodig hebt en herhaal dit.
- Schakel over naar de afdwingende header zodra de console stil blijft.
Test op een kopie van de site en niet op de live versie, zodat een fout je bezoekers niet bereikt.
Wanneer onderneem je actie?
Een CSP is de moeite waard als je site inlogt, betalingen of persoonsgegevens verwerkt, of als er al eens een script is ingespoten. Het vervangt updates niet: draait de site op een PHP-versieEen PHP-versie is het nummer van de uitgave van PHP waarop jouw website draait, zoals 8.3. die geen securityfixesSecurity support is de periode waarin een PHP-versie alleen nog beveiligingsupdates krijgt en geen verbeteringen meer voor gewone fouten. meer krijgt, dan is de eerste stap overstappen naar een ondersteunde versie. Een CSP is de laag die je daarna toevoegt.
Veelgestelde vragen
Houdt een Content Security Policy alle aanvallen tegen?
Nee. Een CSP beperkt wat de browser uitvoert of laadt, waardoor de schade van aanvallen zoals cross-site scripting kleiner wordt. Het repareert geen kwetsbare pluginEen WordPress-plugin is een uitbreiding die je aan je WordPress-site toevoegt voor een extra functie, zoals een formulier of een webshop. of verouderde PHP-versie. Het werkt dus naast updates, niet in plaats ervan.
Waarom ging mijn site stuk nadat ik een CSP toevoegde?
Een strikte policy blokkeert alles wat er niet in staat, ook inline scripts en tools van derden zoals analytics of chatwidgets. Begin in report-only-modus, lees wat er geblokkeerd zou zijn en voeg daarna de bronnen toe die je echt vertrouwt.
Is een CSP lastig in te stellen op WordPress?
Vaak wel. ThemaEen WordPress-thema is het ontwerp van je WordPress-site: het bepaalt hoe pagina's eruitzien en hoe ze zijn opgebouwd.'s en plugins voegen inline scripts toe en laden bestanden van veel plekken, dus een strikte policy vraagt zorgvuldig testen. Een statische site heeft meestal veel minder bewegende delen, waardoor een strakke policy makkelijker te houden is.