Utilia

CSP generátor (Content Security Policy)

Content-Security-Policy fejléc, meta címke és Report-Only változat előbeállításokkal, nonce-okkal és SHA-256 hash-ekkel; meglévő szabályzat ellenőrzése.

Indulás előbeállításból

A Google-hosztok példák a Google tag CSP-útmutatójából. A Google időnként módosítja őket: nézd meg az aktuális dokumentációt, és töröld, amit nem használsz.

Direktívák

Szóközzel elválasztott források. Hagyd üresen a mezőt, ha ki akarod hagyni a direktívát (a fetch-direktívák ilyenkor a default-src értékére esnek vissza).

Gyors hozzáadás

A nonce minden válaszban új, véletlen érték kell legyen: a szervered generálja, és minden <script nonce="…"> elemben megismétli. Az állandó nonce semmit sem véd.

Beágyazott szkript vagy stílus hash-elése

A hash a címkék közötti pontos szövegre vonatkozik, a szóközöket és sortöréseket is beleértve: bármilyen változtatás új hash-t igényel. A beágyazott eseménykezelőkhöz (onclick=…) 'unsafe-hashes' is kell.

Szabálysértési jelentések

Hozzáadja a report-uri-t (régebbi böngészők) és a report-to-t egy Reporting-Endpoints fejléccel.

A <meta> címkében a böngészők figyelmen kívül hagyják a frame-ancestors, report-uri, report-to és sandbox direktívákat, a Report-Only pedig nem támogatott. Tedd a címkét a <head> elejére: csak a utána következő tartalomra vonatkozik.

A szabályzat ellenőrzése

Meglévő szabályzat értékelése

Így állíts össze egy szabályzatot

  1. Válassz kiindulópontot az Indulás előbeállításból résznél: Szigorú (nonce + strict-dynamic), Lezárt statikus oldal, Átlagos weboldal vagy Átlagos + Google Analytics / Ads. A szerkesztő az átlagos weboldal előbeállításával nyílik meg.
  2. Módosítsd a Direktívák értékeit. Minden mező szóközzel elválasztott forrásokat fogad; az üres mező kihagyja a direktívát.
  3. A Gyors hozzáadás segítségével kulcsszót fűzhetsz a kiválasztott Direktívához: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data:… A Nonce hozzáadása gomb egy véletlen 128 bites nonce-ot szúr be.
  4. Ha egy konkrét beágyazott szkriptet 'unsafe-inline' nélkül szeretnél engedélyezni, illeszd be a szkriptet (vagy a körülötte lévő HTML-t) a Beágyazott szkript vagy stílus hash-elése mezőbe, és kattints az SHA-256 számítása és hozzáadás gombra.
  5. Pipáld be az upgrade-insecure-requests opciót, ha néhány régi URL még http:// címet használ, és szükség esetén add meg a Jelentési végpont URL-jét.
  6. Másold ki a HTTP-fejlécet, a Report-Only fejlécet vagy a HTML címkét. Az ellenőrzés (A szabályzat ellenőrzése) gépelés közben frissül.

Ha egy meglévő szabályzatot szeretnél átvilágítani, illeszd be a Meglévő szabályzat értékelése alatt, és kattints a Szabályzat értékelése gombra; a Betöltés a szerkesztőbe a mezőkbe másolja.

Az eszköz a böngésződben fut. Semmit, amit beírsz, nem küld el a szervernek.

Mit csinál a Content Security Policy

A CSP megmondja a böngészőnek, hogy az oldal mely forrásokból tölthet be szkripteket, stíluslapokat, képeket, betűtípusokat, keretekeket és kapcsolatokat. Fő feladata a cross-site scripting (XSS) korlátozása: még ha egy támadó jelölést injektál is az oldaladba, egy jó szabályzat megakadályozza a beinjektált szkript futását. Emellett azt is szabályozza, hogy ki keretezheti az oldaladat (frame-ancestors), hová küldhetők el az űrlapok (form-action), és mire mutathat a <base> (base-uri).

Az olyan fetch-direktívák, mint az img-src vagy a font-src, hiányuk esetén a default-src értékére esnek vissza. A base-uri, a form-action és a frame-ancestors nem esik vissza semmire, ezért kéri őket külön az ellenőrzés.

Nonce, hash és strict-dynamic

A hosztok engedélyezése (script-src https://cdn.example.com) biztonságosnak tűnik, de gyakran megkerülhető: a nagy domainek JSONP-végpontokat és régi könyvtárakat szolgálnak ki, amelyeket egy támadó újrahasznosíthat. A böngészőbiztonsági csapatok által ajánlott megoldás a szigorú CSP: minden jogos <script> egy, a szerver által válaszonként generált nonce-ot kap, vagy a hash-e alapján engedélyezett, a 'strict-dynamic' pedig lehetővé teszi, hogy ezek a megbízható szkriptek betöltsék a szükséges további szkripteket. Ebben a felállásban a https: és az 'unsafe-inline' csak a nagyon régi böngészők tartaléka; a modern böngészők figyelmen kívül hagyják őket.

A nonce csak akkor működik, ha minden válaszban változik, és kiszámíthatatlan. A Nonce hozzáadása gombbal beszúrt érték csak példa: a szervernek vagy a keretrendszernek kell a sajátját generálnia. A hash a beágyazott kód pontos bájtjaira vonatkozik, ezért a szkript átformázása új hash-t igényel.

Fejléc, Report-Only és meta címke

Amikor csak lehet, a szabályzatot HTTP-válaszfejlécként küldd el. Először Content-Security-Policy-Report-Only fejlécként vezesd be: a böngészők jelentik a szabálysértéseket (a konzolra, és ha megadtál végpontot, oda is), de semmit sem blokkolnak, így még az érvényesítés előtt kijavíthatod az oldalaidat. A jelentési beállítások a régebbi böngészők számára report-uri-t, a többinek report-to-t adnak Reporting-Endpoints fejléccel.

A <meta http-equiv> változat statikus tárhelyen kényelmes, de a böngészők figyelmen kívül hagyják benne a frame-ancestors, report-uri, report-to és sandbox direktívát, és Report-Only meta címke nem létezik. Az eszköz kihagyja ezeket a direktívákat a címkéből, és ezt jelzi is.

Gyakori kérdések

Gond az 'unsafe-inline' a style-src-ben?

Kevésbé veszélyes, mint a script-src-ben, és nagyon gyakori, mert sok könyvtár beágyazott stílusokat állít be. A beinjektált CSS így is eltorzíthatja az oldalt vagy adatot szivárogtathat, ezért az ellenőrzés alacsony súlyosságúként sorolja fel.

Teljesek a Google Analytics hosztjai?

Példák a Google tag CSP-útmutatójából. A Google időről időre módosítja őket, és regionális domainekre is szükség lehet; nézd meg a Google aktuális dokumentációját, és töröld, amit nem használsz. A gtag.js beágyazott kódrészletéhez is kell nonce vagy hash.

Miért blokkolja a szabályzatom a saját beágyazott szkriptjeimet?

Ha a script-src 'unsafe-inline' nélkül van megadva, minden beágyazott <script> és onclick= attribútum blokkolva lesz. Tedd a kódot fájlba, vagy adj hozzá nonce-ot vagy hash-t.

Kiváltja a CSP a felhasználói bemenet escape-elését?

Nem. A CSP a második védvonal. Továbbra is escape-eld a kimenetet és validáld a bemenetet; a szabályzat csak a kárt korlátozza, ha valami átcsúszik.

Lehet több szabályzatom is?

Igen: ha egy oldal több CSP-fejlécet kap, az erőforrásnak mindegyiknek meg kell felelnie. Az értékelőbe egyszerre egy szabályzatot illessz be.