Utilia

CSP-generator (Content Security Policy)

Byg en Content-Security-Policy som header, meta-tag og Report-Only med skabeloner, nonces og SHA-256-hashes, og gennemgå en eksisterende politik.

Start med en skabelon

Google-værterne er eksempler fra Googles CSP-vejledning til Google-tagget. Google ændrer dem fra tid til anden: tjek den aktuelle dokumentation, og fjern det, du ikke bruger.

Direktiver

Kilder adskilt af mellemrum. Lad et felt stå tomt for at udelade direktivet (fetch-direktiver falder så tilbage på default-src).

Hurtig tilføjelse

En nonce skal være en ny tilfældig værdi i hvert svar, genereret af din server og gentaget i hvert <script nonce="…">. En fast nonce beskytter ikke mod noget.

Hash et inline-script eller en inline-typografi

Hashen dækker den nøjagtige tekst mellem tags, inklusive mellemrum og linjeskift: enhver ændring kræver en ny hash. Inline-hændelseshandlere (onclick=…) kræver også 'unsafe-hashes'.

Overtrædelsesrapporter

Tilføjer report-uri (ældre browsere) og report-to med en Reporting-Endpoints-header.

I et <meta>-tag ignorerer browsere frame-ancestors, report-uri, report-to og sandbox, og Report-Only understøttes ikke. Placér tagget øverst i <head>: det gælder kun for indhold, der kommer efter det.

Gennemgang af denne politik

Vurdér en eksisterende politik

Sådan bygger du en politik

  1. Vælg et udgangspunkt under Start med en skabelon: Streng (nonce + strict-dynamic), Låst statisk side, Typisk hjemmeside eller Typisk + Google Analytics / Ads. Editoren åbner med skabelonen for en typisk hjemmeside.
  2. Tilpas Direktiver. Hvert felt tager kilder adskilt af mellemrum; et tomt felt udelader direktivet.
  3. Brug Hurtig tilføjelse til at tilføje et nøgleord til det valgte Direktiv: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data: … Tilføj en nonce indsætter en tilfældig 128-bit nonce.
  4. Hvis du vil tillade et bestemt inline-script uden 'unsafe-inline', så indsæt det (eller den HTML, der omgiver det) under Hash et inline-script eller en inline-typografi og klik på Beregn SHA-256 og tilføj.
  5. Sæt kryds ved upgrade-insecure-requests, hvis nogle gamle adresser stadig bruger http://, og angiv eventuelt en Adresse på rapportslutpunkt (valgfri).
  6. Kopiér HTTP-header, Report-Only-header eller HTML--tag. Gennemgang af denne politik opdateres, mens du skriver.

Vil du gennemgå en politik, du allerede har, så indsæt den under Vurdér en eksisterende politik og klik på Vurdér politik; Indlæs i editoren kopierer den over i felterne.

Alt kører i din browser. Intet, du indtaster, sendes til en server.

Hvad en Content Security Policy gør

En CSP fortæller browseren, hvilke oprindelser en side må indlæse scripts, typografiark, billeder, skrifttyper, rammer og forbindelser fra. Dens vigtigste opgave er at begrænse cross-site scripting (XSS): selv hvis en angriber får injiceret markup på din side, forhindrer en god politik, at det injicerede script kører. Den styrer også, hvem der må indlejre din side (frame-ancestors), hvor formularer må sendes hen (form-action), og hvad <base> kan pege på (base-uri).

Fetch-direktiver som img-src eller font-src falder tilbage på default-src, når de mangler. base-uri, form-action og frame-ancestors falder ikke tilbage, og det er derfor, gennemgangen udtrykkeligt beder om dem.

Nonces, hashes og strict-dynamic

Det ser sikkert ud at tillade bestemte værter (script-src https://cdn.example.com), men det kan ofte omgås: store domæner hoster JSONP-slutpunkter og gamle biblioteker, som en angriber kan genbruge. Den fremgangsmåde, som browserproducenternes sikkerhedsteams anbefaler, er en streng CSP: hvert legitimt <script> har en nonce, som serveren genererer til hvert svar, eller er tilladt via sin hash, og 'strict-dynamic' lader disse betroede scripts indlæse de scripts, de har brug for. I den opsætning er https: og 'unsafe-inline' kun en reserve til meget gamle browsere; moderne browsere ignorerer dem.

En nonce virker kun, hvis den ændrer sig ved hvert svar og ikke kan gættes. Den, Tilføj en nonce indsætter, er blot et eksempel: din server eller dit framework skal generere sin egen. En hash dækker de nøjagtige bytes i inline-koden, så hvis du omformaterer scriptet, skal du bruge en ny hash.

Header, Report-Only og meta-tag

Send politikken som en HTTP-svarheader, når du kan. Rul den først ud som Content-Security-Policy-Report-Only: browsere rapporterer overtrædelser (i konsollen og til dit slutpunkt, hvis du har angivet et) uden at blokere noget, så du kan rette dine sider, før du håndhæver politikken. Rapportindstillingerne tilføjer report-uri til ældre browsere og report-to med en Reporting-Endpoints-header.

Versionen med <meta http-equiv> er praktisk på statisk hosting, men browsere ignorerer frame-ancestors, report-uri, report-to og sandbox i den, og der findes intet Report-Only-meta-tag. Værktøjet fjerner disse direktiver fra tagget og fortæller dig det.

Ofte stillede spørgsmål

Er 'unsafe-inline' i style-src et problem?

Det er mindre farligt end i script-src og meget almindeligt, fordi mange biblioteker sætter inline-typografi. Injiceret CSS kan stadig ødelægge udseendet af en side eller lække data, så gennemgangen angiver det som lav alvorlighed.

Er Google Analytics-værterne fuldstændige?

De er eksempler fra Googles CSP-vejledning til Google-tagget. Google justerer dem over tid, og der kan være brug for regionale domæner; tjek Googles aktuelle dokumentation, og fjern det, du ikke bruger. Det inline gtag.js-uddrag kræver også en nonce eller en hash.

Hvorfor blokerer min politik mine egne inline-scripts?

Når script-src er sat uden 'unsafe-inline', bliver hvert inline-<script> og hver onclick=-attribut blokeret. Flyt koden over i en fil, eller tilføj en nonce eller en hash.

Erstatter en CSP escaping af brugerinput?

Nej. En CSP er en anden forsvarslinje. Bliv ved med at escape output og validere input; politikken begrænser skaden, når noget slipper igennem.

Kan jeg have flere politikker?

Ja: hvis en side modtager flere CSP-headere, skal en ressource opfylde dem alle. Indsæt én politik ad gangen i vurderingsfeltet.