Utilia

Generátor CSP (Content Security Policy)

Vytvoř hlavičku Content-Security-Policy, značku meta i verzi Report-Only s předvolbami, nonce a hashi SHA-256 a zkontroluj existující politiku.

Začít z předvolby

Hostitelé Googlu jsou příklady z doporučení Googlu k CSP pro značku Google. Google je čas od času mění: zkontroluj aktuální dokumentaci a odstraň to, co nepoužíváš.

Direktivy

Zdroje oddělené mezerou. Prázdné pole direktivu vynechá (direktivy typu fetch se pak řídí direktivou default-src).

Rychlé přidání

Nonce musí být při každé odpovědi nová náhodná hodnota, kterou vygeneruje tvůj server a zopakuje ji v každém <script nonce="…">. Pevně daný nonce nechrání nic.

Hash vloženého skriptu nebo stylu

Hash se počítá z přesného textu mezi značkami včetně mezer a zalomení řádků: každá změna vyžaduje nový hash. Vložené obslužné rutiny událostí (onclick=…) potřebují navíc 'unsafe-hashes'.

Hlášení porušení

Přidá report-uri (pro starší prohlížeče) a report-to s hlavičkou Reporting-Endpoints.

V značce <meta> prohlížeče ignorují frame-ancestors, report-uri, report-to a sandbox a Report-Only není podporováno. Umísti značku na začátek <head>: platí jen pro obsah, který následuje za ní.

Kontrola této politiky

Vyhodnotit existující politiku

Jak vytvořit politiku

  1. Pod Začít z předvolby vyber výchozí bod: Přísná (nonce + strict-dynamic), Uzamčený statický web, Typický web nebo Typický + Google Analytics / Ads. Editor se otevře s předvolbou typického webu.
  2. Uprav Direktivy. Každé pole přijímá zdroje oddělené mezerou; prázdné pole direktivu vynechá.
  3. Pomocí Rychlé přidání připojíš klíčové slovo k vybrané Direktiva: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data: … Přidat nonce vloží náhodný 128bitový nonce.
  4. Chceš-li povolit konkrétní vložený skript bez 'unsafe-inline', vlož ho (nebo okolní HTML) do pole Hash vloženého skriptu nebo stylu a klikni na Vypočítat SHA-256 a přidat.
  5. Zaškrtni upgrade-insecure-requests, pokud některé staré adresy stále používají http://, a podle potřeby zadej URL koncového bodu pro hlášení (volitelné).
  6. Zkopíruj Hlavička HTTP, Hlavička Report-Only (test bez blokování) nebo Značka HTML . Kontrola této politiky se aktualizuje během psaní.

Pokud chceš zkontrolovat politiku, kterou už máš, vlož ji pod Vyhodnotit existující politiku a klikni na Vyhodnotit politiku; tlačítko Načíst do editoru ji zkopíruje do polí. Vše běží lokálně ve tvém prohlížeči a nic, co zadáš, se neodesílá na server.

K čemu je Content Security Policy

CSP říká prohlížeči, z jakých původů smí stránka načítat skripty, styly, obrázky, písma, rámce a spojení. Jejím hlavním úkolem je omezit cross-site scripting (XSS): i když útočník do tvé stránky vloží značky, dobrá politika zabrání spuštění vloženého skriptu. Řídí také to, kdo smí tvou stránku vložit do rámce (frame-ancestors), kam lze odesílat formuláře (form-action) a na co může odkazovat <base> (base-uri).

Direktivy typu fetch, například img-src nebo font-src, se při absenci řídí direktivou default-src. Direktivy base-uri, form-action a frame-ancestors takovou zálohu nemají, a proto je kontrola výslovně požaduje.

Nonce, hashe a strict-dynamic

Povolování hostitelů (script-src https://cdn.example.com) vypadá bezpečně, ale často jde obejít: velké domény hostují koncové body JSONP a staré knihovny, které může útočník zneužít. Postup doporučovaný bezpečnostními týmy prohlížečů se nazývá přísná CSP: každý legitimní <script> nese nonce, který server vygeneruje pro každou odpověď, nebo je povolen svým hashem a 'strict-dynamic' dovolí těmto důvěryhodným skriptům načíst skripty, které potřebují. V takovém nastavení jsou https: a 'unsafe-inline' jen zálohou pro velmi staré prohlížeče; moderní je ignorují.

Nonce funguje, jen pokud se mění při každé odpovědi a nelze ho předvídat. Ten, který vloží Přidat nonce, je pouhý příklad: tvůj server nebo framework si musí vygenerovat vlastní. Hash pokrývá přesné bajty vloženého kódu, takže po přeformátování skriptu je potřeba nový hash.

Hlavička, Report-Only a značka meta

Politiku posílej jako hlavičku odpovědi HTTP, kdykoli to jde. Nejprve ji nasaď jako Content-Security-Policy-Report-Only: prohlížeče hlásí porušení (do konzole a na tvůj koncový bod, pokud jsi ho nastavil), ale nic neblokují, takže můžeš stránky opravit dřív, než politiku začneš vynucovat. Nastavení hlášení přidává report-uri pro starší prohlížeče a report-to s hlavičkou Reporting-Endpoints.

Verze <meta http-equiv> se hodí na statickém hostingu, jenže prohlížeče v ní ignorují frame-ancestors, report-uri, report-to a sandbox a značka meta pro Report-Only neexistuje. Nástroj tyto direktivy ze značky odstraní a upozorní na to.

Časté dotazy

Je 'unsafe-inline' ve style-src problém?

Je méně nebezpečné než ve script-src a je velmi běžné, protože mnoho knihoven nastavuje vložené styly. Vložené CSS však může stránku poškodit nebo vynášet data, a proto to kontrola uvádí s nízkou závažností.

Jsou hostitelé pro Google Analytics úplní?

Jsou to příklady z doporučení Googlu k CSP pro značku Google. Google je časem upravuje a mohou být potřeba i regionální domény; zkontroluj aktuální dokumentaci Googlu a odstraň to, co nepoužíváš. Vložený úryvek gtag.js také potřebuje nonce nebo hash.

Proč moje politika blokuje mé vlastní vložené skripty?

Jakmile je nastaven script-src bez 'unsafe-inline', je zablokován každý vložený <script> i atribut onclick=. Přesuň kód do souboru nebo přidej nonce či hash.

Nahrazuje CSP escapování uživatelského vstupu?

Ne. CSP je druhá linie obrany. Výstup dál escapuj a vstup validuj; politika omezí škody, když se něco přece jen protlačí.

Mohu mít několik politik najednou?

Ano: pokud stránka dostane několik hlaviček CSP, zdroj musí vyhovět všem. Do vyhodnocení vkládej vždy jednu politiku.