Generátor CSP

Zaškrtnutím direktív a zdrojov táto stránka zostaví správnu jednoriadkovú Content-Security-Policy pre hlavičku odpovede alebo značku <meta> — spolu s poznámkami, ktoré sú dôležité: ktoré direktívy nikdy nepadajú späť na default-src, kedy hash alebo nonce potichu prepíšu unsafe-inline a čo vypne strict-dynamic. Vstavaný generátor hashov SHA-256/384/512 premení vložené skripty a štýly na zdroje 'sha256-…'. Všetko beží v prehliadači; nič sa nenahráva.
Nezaškrtnuté direktívy sa jednoducho v politike neobjavia; zaškrtnutie bez vybraných zdrojov sa ignoruje. 'none' zruší ostatné políčka v jeho riadku. Políčko dodatočné zdroje prijíma zoznam oddelený čiarkami: názvy hostiteľov (cdn.example.com), schémy (https:), hashe a nonce s úvodzovkami alebo bez nich.
direktíva 'self''none''unsafe-inline' 'unsafe-eval''strict-dynamic' data:blob: dodatočné zdroje
Tieto štyri direktívy nepadajú späť na default-src: ak sa vynechajú, znamená to „žiadne obmedzenie“, takže úplná politika ich nastavuje výslovne.
direktíva'self''none'dodatočné zdroje

nonce skriptu
report-uri
report-to
Zatiaľ nič nebolo vytvorené. Zaškrtnú sa niektoré zdroje a stlačí Zostaviť politiku, alebo sa načíta vzorka základu OWASP.
Vloží sa presný obsah medzi <script> a </script> (alebo blok štýlu) — bajt po bajte, bez úvodného ani koncového nového riadku — a zvolí sa algoritmus. Výsledkom je zdroj 'sha256-…', ktorý CSP 3 očakáva.
Výstup hashu sa zobrazí tu.
Nasadenie ako hlavička, nie ako značka meta, kedykoľvek je to možné. Odpoveď hlavičkou je úplné CSP: frame-ancestors, report-uri a report-to fungujú iba tam a hlavička sa uplatní skôr, než sa spracuje prvý bajt HTML. Značka meta je záložné riešenie pre statické súbory bez konfigurácie servera. Hlavičky, ktoré web naozaj posiela, sa skontrolujú v kontrole bezpečnostných hlavičiek a surové bloky odpovedí sa rozložia v analyzátore hlavičiek HTTP.
Autotest
Zostavovač sa znova spustí nad pevnými stavmi: poradie zdrojov, vzájomné vylúčenie 'none', reťazec základu OWASP, úvodzovky nonce a hashov, poznámky o absencii záložných hodnôt pre base-uri / form-action / frame-ancestors, unsafe-inline prepísané nonce alebo hashom, poznámky k strict-dynamic, názvy hlavičiek Report-Only, vylúčenia pre značku meta, generátor hashov oproti nezávisle vypočítaným vektorom SHA a záporné cesty. Nič sa nikam neodosiela.
Čo je Content Security Policy?
Jednou vetou: CSP je zoznam povolených zdrojov, ktorý server posiela spolu so stránkou a ktorý prehliadaču presne hovorí, odkiaľ môžu prichádzať skripty, štýly, obrázky a spojenia — takže aj keď útočník vloží HTML, vložený skript sa načítať nepodarí, lebo jeho zdroj nie je na zozname.
Tri skupiny direktív
SkupinaPríkladyOvládacie prvkyPadá späť na default-src?
Direktívy načítaniascript-src, style-src, img-src, connect-src, font-src, object-src, frame-src, worker-src, media-src, manifest-srckde sa každý druh obsahu môže načítaťáno — neoznačená direktíva dedí default-src
Direktívy dokumentubase-uri, form-action, frame-ancestors, sandboxčo samotná stránka smie robiť (byť vložená, odosielať formuláre, riešiť relatívne adresy URL)nie — každá musí byť nastavená výslovne
Hlásenia a ostatnéreport-uri, report-to, upgrade-insecure-requestskam smerujú hlásenia o porušeniach a upgrade starých adries URLnie (nie sú to direktívy načítania)
Najostrejšie hrany, po jednom odseku

'unsafe-inline' verzus hashe a nonce. Ak direktíva obsahuje nonce alebo akýkoľvek zdroj hash, CSP 3 hovorí, že 'unsafe-inline' sa ignoruje — zostáva tam iba pre veľmi staré prehliadače. Preto „pridali sme nonce a nechali unsafe-inline pre istotu“ v skutočnosti znamená, že moderné prehliadače vynucujú nonce. Generátor túto kombináciu označí, aby išlo o rozhodnutie, nie o náhodu.

strict-dynamic vypína zoznam povolených. Pri strict-dynamic v script-src sa pre skripty ignorujú zdroje hostiteľov, schémy, 'self', 'unsafe-inline' a data:; rozhodujú iba nonce a hashe a skripty, ktoré načítajú, môžu načítať ďalšie skripty. Je to moderný spôsob spúšťania načítavacích skriptov — ale zvyšok zoznamu script-src tým zostáva iba dekoráciou.

Meta značky sú druhej triedy. frame-ancestors, report-uri a report-to sa v <meta http-equiv> ignorujú. Generátor ukazuje, ktoré časti politiky by sa potichu neuplatnili.

Časté chyby
  • Začať s default-src * a dlhým zoznamom výnimiek. Opačný postup je lepší: najprv tesný default-src 'self' a potom sa rozširujú iba direktívy, ktoré to potrebujú. Úzke politiky zlyhávajú nahlas počas testovania; široké zlyhávajú potichu navždy.
  • Nasadenie script-src 'unsafe-inline' 'unsafe-eval' s tvrdením, že je hotovo. Táto politika blokuje takmer nič, čo útok XSS chce robiť. Skripty sa opatria nonce alebo hashom, pridá sa strict-dynamic a v produkcii sa nechá bežať report-only, aby sa zachytili regresie.
  • Zabudnúť, že default-src nepokrýva všetko. base-uri, form-action, frame-ancestors a sandbox nemajú záložnú hodnotu — najčastejšie citovaná medzera v reálnych nasadeniach CSP.
  • Testovať najprv v režime vynucovania. Na týždeň sa spustí režim Report-Only so zberačom, prečítajú sa hlásenia a až potom sa prepne na vynucovanie. Politika, ktorá rozbije objednávkový proces, je horšia než žiadna politika.
  • Iné hashovanie medzier. Hash pokrýva presné bajty vloženého bloku; „užitočný“ build krok, ktorý orezáva koncové nové riadky, zmení každý hash. Hashe sa generujú z toho, čo sa naozaj nasadzuje, nie zo zdrojov.
FAQ

Potrebujem default-src, ak sú uvedené všetky direktívy? Nie, ale ponechanie ako základu je dobrá hygiena: nové direktívy na získavanie v budúcich prehliadačoch sa potom predvolene držia základnej línie namiesto „povolené“.

Čo naozaj robí upgrade-insecure-requests? Hovorí prehliadaču, aby prepísal každú adresu http://, ktorú by stránka načítala — obrázky, štýly, požiadavky fetch — na https:// ešte pred jej vyžiadaním. Je to migračný nástroj; konečným stavom sú stránky bez akejkoľvek adresy http://.

Nonce alebo hash? Nonce, keď ovládate odpoveď servera (náhodná hodnota pre každú odpoveď, v hlavičke aj v každej značke skriptu). Hash, keď je HTML statické alebo uložené v medzipamäti. Nikdy statický nonce — nonce, ktorý sa nemení, je iba unsafe-inline s ďalšími krokmi.

Prečo sa politika doručí, ale hlásenia o porušeniach nechodia? Treba skontrolovať, či sa beží v režime Report-Only (iba hlásenia), či report-uri smeruje na zberač, ktorý prijíma POST, a či je nastavený aj mechanizmus Reporting-Endpoints / Report-To, ktorý moderná direktíva report-to vyžaduje.

Nahrádza CSP ostatné ochrany? Nie. Je to jedna vrstva: výstup treba ďalej escapovať, cookies držať za HttpOnly a Secure a HSTS ponechať zapnuté. Kontrola bezpečnostných hlavičiek na tejto stránke ohodnotí celú sadu.