Een Content Security Policy (CSP) is een regel die een website naar de browser stuurt en die precies opsomt welke bronnen scripts, afbeeldingen, stijlen en andere content mogen leveren. Alles wat niet op de lijst staat wordt simpelweg geweigerd, ook als een aanvaller het op de pagina wist te krijgen.

Stel je een strikte gastenlijst voor bij een besloten evenement. De portiers maakt het niet uit hoe overtuigend een indringer eruitziet; staat de naam niet op de lijst, dan komt hij er niet in. Een CSP is die gastenlijst voor je webpagina: je verklaart ‘scripts mogen alleen van mijn eigen domein komen en van deze ene vertrouwde analyticspartij’, en de browser dwingt dat af. Dit is de meest effectieve verdediging tegen cross-site scripting, waarbij ingespoten JavaScript probeert te draaien in de browsers van je bezoekers.

De policy bestaat uit directives. script-src bepaalt waar code vandaan mag komen, img-src gaat over afbeeldingen, style-src over CSS en default-src zet een terugval voor alles wat je niet apart benoemt. Een veelvoorkomende valkuil is dat je 'unsafe-inline' nodig hebt voor oude inline scripts, wat de hele policy stilletjes verzwakt. Schoner is om die code eerst naar nette bestanden te verplaatsen.

Een CSP wordt verstuurd als een van de website-beveiligingsheaders. Omdat een te strikte policy je eigen legitieme code kan blokkeren, rollen teams hem meestal eerst in report-only modus uit, bekijken wat kapot zou gaan en zetten hem dan af te dwingen. Je kunt zelfs een report-uri naar een logpunt wijzen, zodat echte overtredingen opduiken terwijl je de regels bijschaaft.

Bij TopDevs stemmen we voor elke site die we bouwen een Content Security Policy af, strikt genoeg om ingespoten scripts meteen te stoppen en toch ruim genoeg om je echte content vlekkeloos te laten laden.