Generátor CSP — bezpečnostná politika obsahu, s označenými ostrými hranami
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.
Direktívy načítania — odkiaľ môže obsah prichádzať
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
Direktívy dokumentu — čo môže samotná stránka robiť
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
Prepínače, nonce a hlásenia
nonce skriptu
report-uri
report-to
Politika
Zatiaľ nič nebolo vytvorené. Zaškrtnú sa niektoré zdroje a stlačí Zostaviť politiku, alebo sa načíta vzorka základu OWASP.
Generátor hashov pre vložené skripty a štýly
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.
č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-requests
kam smerujú hlásenia o porušeniach a upgrade starých adries URL
nie (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.