Content Security Policy-generator
Maak een Content-Security-Policy-header, meta-tag en Report-Only-versie met voorinstellingen, nonces en SHA-256-hashes, en beoordeel een bestaand beleid.
Begin met een voorinstelling
De Google-hosts zijn voorbeelden uit Googles CSP-richtlijnen voor de Google-tag. Google past ze af en toe aan: raadpleeg de actuele documentatie en verwijder wat je niet gebruikt.
In een <meta>-tag negeren browsers frame-ancestors, report-uri, report-to en sandbox, en Report-Only wordt niet ondersteund. Zet de tag bovenaan in <head>: hij geldt alleen voor inhoud die erna komt.
Beoordeling van dit beleid
Deze controles vonden geen zwakke punten.
Een bestaand beleid beoordelen
Zo stel je een beleid op
- Kies een vertrekpunt onder Begin met een voorinstelling: Strikt (nonce + strict-dynamic), Afgeschermde statische site, Gewone website of Gewoon + Google Analytics / Ads. De editor opent met de voorinstelling voor een gewone website.
- Pas de Directives aan. Elk veld bevat bronnen gescheiden door spaties; een leeg veld laat de directive weg.
- Gebruik Snel toevoegen om een trefwoord aan de gekozen Directive toe te voegen:
'self','none','unsafe-inline','strict-dynamic',https:,data:… Nonce toevoegen voegt een willekeurige nonce van 128 bits in. - Wil je één bepaald inline script toestaan zonder
'unsafe-inline'? Plak het (of de HTML eromheen) bij Hash van een inline script of stijl en klik op SHA-256 berekenen en toevoegen. - Vink upgrade-insecure-requests aan als sommige oude URL’s nog
http://gebruiken, en vul eventueel een URL van het meldingsendpoint in. - Kopieer de HTTP-header, de Report-Only-header of de HTML--tag. De Beoordeling van dit beleid wordt bijgewerkt terwijl je typt.
Wil je een beleid controleren dat je al hebt? Plak het onder Een bestaand beleid beoordelen en klik op Beleid beoordelen; met In de editor laden zet je het in de velden.
Wat een Content Security Policy doet
Een CSP vertelt de browser vanaf welke origins een pagina scripts, stijlen, afbeeldingen, fonts, frames en verbindingen mag laden. De belangrijkste taak is cross-site scripting (XSS) beperken: ook als een aanvaller markup in je pagina weet te injecteren, voorkomt een goed beleid dat het geïnjecteerde script draait. Daarnaast bepaalt het wie je pagina in een frame mag tonen (frame-ancestors), waarheen formulieren mogen posten (form-action) en waar <base> naar mag verwijzen (base-uri).
Fetch-directives zoals img-src of font-src vallen terug op default-src als ze ontbreken. base-uri, form-action en frame-ancestors doen dat niet, en daarom vraagt de beoordeling er expliciet om.
Nonces, hashes en strict-dynamic
Hosts toestaan (script-src https://cdn.example.com) lijkt veilig, maar is vaak te omzeilen: grote domeinen hosten JSONP-endpoints en oude bibliotheken die een aanvaller kan hergebruiken. De aanpak die de beveiligingsteams van browsers aanraden is een strikte CSP: elk legitiem <script> krijgt een nonce die de server per response genereert, of wordt toegestaan via zijn hash, en 'strict-dynamic' laat die vertrouwde scripts de scripts laden die ze nodig hebben. In die opzet zijn https: en 'unsafe-inline' alleen een terugval voor heel oude browsers; moderne browsers negeren ze.
Een nonce werkt alleen als hij bij elke response verandert en onvoorspelbaar is. De nonce die Nonce toevoegen invoegt is een voorbeeld: je server of framework moet er zelf een genereren. Een hash dekt de exacte bytes van de inline code, dus als je het script anders opmaakt, heb je een nieuwe hash nodig.
Header, Report-Only en meta-tag
Stuur het beleid waar mogelijk mee als HTTP-responseheader. Zet het eerst live als Content-Security-Policy-Report-Only: browsers melden schendingen (in de console, en aan je endpoint als je er een instelt) zonder iets te blokkeren, zodat je je pagina’s kunt aanpassen voordat je het beleid afdwingt. De meldingsinstellingen voegen report-uri toe voor oudere browsers en report-to met een Reporting-Endpoints-header.
De versie met <meta http-equiv> is handig bij statische hosting, maar browsers negeren daarin frame-ancestors, report-uri, report-to en sandbox, en een Report-Only-meta-tag bestaat niet. De tool haalt die directives uit de tag en meldt dat. Alles gebeurt in je browser: het beleid en je code worden nergens naartoe gestuurd.
Veelgestelde vragen
Is 'unsafe-inline' in style-src een probleem?
Het is minder gevaarlijk dan in script-src en heel gebruikelijk, omdat veel bibliotheken inline stijlen zetten. Geïnjecteerde CSS kan een pagina nog steeds verminken of gegevens lekken, dus de beoordeling geeft het een lage ernst.
Zijn de Google Analytics-hosts volledig?
Het zijn voorbeelden uit Googles CSP-richtlijnen voor de Google-tag. Google past ze in de loop van de tijd aan en soms zijn regionale domeinen nodig; raadpleeg de actuele documentatie van Google en verwijder wat je niet gebruikt. Het inline fragment van gtag.js heeft ook een nonce of hash nodig.
Waarom blokkeert mijn beleid mijn eigen inline scripts?
Zodra script-src is ingesteld zonder 'unsafe-inline', wordt elk inline <script> en elk onclick=-attribuut geblokkeerd. Verplaats de code naar een bestand, of voeg een nonce of hash toe.
Vervangt een CSP het escapen van gebruikersinvoer?
Nee. Een CSP is een tweede verdedigingslinie. Blijf uitvoer escapen en invoer valideren; het beleid beperkt de schade als er toch iets doorheen glipt.
Kan ik meerdere beleidsregels hebben?
Ja: als een pagina meerdere CSP-headers krijgt, moet een bron aan allemaal voldoen. Plak in de beoordelaar telkens één beleid tegelijk.
Vergelijkbare tools
- .htaccess-redirectgenerator Genereer 301- en 302-redirects voor .htaccess of Nginx, dwing HTTPS en www af, verhuis een domein en regel de slash, met controle op lussen en ketens.
- Metatags genereren Gratis metatag-generator voor de titel, metabeschrijving, canonieke URL, robots- en viewporttags, met lengtecontrole en correct ge-escapete HTML.
- Hash-generator Bereken MD5-, SHA-1-, SHA-256- en SHA-512-hashes van tekst of bestanden van elke grootte en controleer checksums. Alles draait in je browser.
- Robots.txt-generator Maak een geldig robots.txt-bestand met user-agentgroepen, Allow- en Disallow-regels, sitemaps en crawl-delay, met controle op veelgemaakte fouten.