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.
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
Ezek az ellenőrzések nem találtak gyengeséget.
Meglévő szabályzat értékelése
Így állíts össze egy szabályzatot
- 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.
- 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.
- 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. - 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. - 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. - 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.
Kapcsolódó eszközök
- .htaccess átirányítás generátor 301 és 302 átirányítások generálása .htaccess-hez vagy Nginxhez, HTTPS és www kikényszerítése, domainváltás, törtvonal-javítás, hurok- és láncellenőrzéssel.
- Meta címke generátor Ingyenes meta címke generátor a title, meta description, canonical URL, robots és viewport címkékhez, hosszellenőrzéssel és helyesen escape-elt HTML-lel.
- Hash generátor Generálj MD5, SHA-1, SHA-256 és SHA-512 hasheket szövegből vagy bármekkora fájlból, és ellenőrizd az ellenőrző összegeket. Minden a böngésződben fut.
- Robots.txt generátor Készíts érvényes robots.txt fájlt user-agent csoportokkal, Allow és Disallow szabályokkal, sitemapekkel és crawl-delay értékkel, gyakori hibák ellenőrzésével.