Politika „načítání“ zdrojů, nebo-li nastavení whitelistingu zdrojů.
Content Security Policy je hlavička, která prohlížeči říká co vše za soubory může do stránek nahrát a jak. Použitím CSP lze zabránit, aby byly do stránek vkládány škodlivé funkce. Nastavení lze atomizovat až na jednotlivé typy souborů (obrázky, skripty, styly, fonty, média), může se nařídit pouze načítání přes https protokol nebo pouze z vlastní domény. CSP hlavička může být poměrně obsáhlá a pokud načítaný obsah nevyhovuje jejím pravidlům, není načten a prohlížeč do své konzole vypíše chybovou zprávu.
U složitějších webů nasazení hlavičky Content-Security-Policy není zcela triviální a vyžaduje přesnou analýzu načítaného obsahu a nastavení správných pravidel.
Content Security Policy je velice užitečná hlavička ochrany proti XSS útokům a vkládání zákeřného kódu útočícího na uživatele. Určuje povolené URL, ze kterých může prohlížeč do stránky stahovat JavaScript, CSS, obrázky a další zdroje. Dobře nastavená pravidla pomohou vývojářům ochránit aplikace, zmírní riziko zranitelností injektování kódu čí sníží oprávnění, s jakým se aplikace spouštějí. V neposlední řadě zajistí zvýšenou bezpečnost uživatelů.
Content-Security-Policy: <policy-directive>; <policy-directive>;
Z hlediska obsáhlosti možností nastavení CSP hlavičky uvádíme pouze část parametrů. Více informací viz. Užitečné zdroje níže.
default-src → definuje politiku všech typů a zdrojů, pokud není nastavena vlastní politika script-src → definuje, které skripty mohou být spouštěny object-src → definuje, od kud mohou být nahrány pluginy style-src → definuje, jaké styly lze použít img-src → definuje, od kud mohou být nahrány obrázky media-src → definuje, od kud mohou být nahrány video a audio soubory frame-src → definuje, od kud je možné vkládat rámy font-src → definuje, od kud mohou být nahrány fonty connect-src → definuje, z jaké URI se mohou nahrávat scripty form-action → definuje, jaká adresu lze použít pro HTML form sandbox → nastavení HTML sandbox politiky prohlížeče report-uri → nastavení URI kam prohlížeč zašle porušení zásad report-to → plánované nahrazení report-uri
K parametru je také možné uvést některé z klíčových slov.
'none' → zablokuje pužití tohoto zdroje 'self' → respektuje pouze vlastní doménu (current origin), ne subdomény 'unsafe-inline' → dovoluje u direktiv script-src a style-src povolit inline skripty 'unsafe-eval' → dovoluje použít mechanismus jako eval() https: → vynucuje veškeré zdroje, které se mají načíst přes protokol HTTPS data: → povoluje vkládané zdroje v kódování Base64
Krom výše uvedeného je možné používat i další funkce CSP.
block-all-mixed-content → zablokuje veškeré nahrání obsahu z http, pokud je stránka na https upgrade-insecure-requests → prohlížeč bude načítat obsah pouze přes zabezpečený protokol require-sri-for → vynucené požadování Subresource Integrity pro scripty nebo styly na stránce
Content-Security-Policy: default-src https:;
Jakékoliv externí a interní soubory a prvky lze načítat pouze přes zabezpečené HTTPS.
Content-Security-Policy: default-src domenaxyz.cz;
Dovoluje načítat zdroje pouze a jenom z uvedené domény.
Content-Security-Policy: default-src 'none'; script-src https://domenaxyz.cz;
Nastavení blokuje načítání libovolného obsahu krom skriptů načtených z domény přes https.
Content-Security-Policy: upgrade-insecure-requests;
Prohlížeč bude vynuceně načítat vše z https aby se vyhnul Mixed contentu. Vhodné nastavení pro větší weby při přechodu z nezabezpečeného http -> https. V případě že zdroj není dostupný po https protokolu, nenačte se.
Hlavička není funkční v prohlížeči IE (caniuse.com "upgrade-insecure-requests").
# CSP settings
Header set Content-Security-Policy: "style-src 'self' https://cdnjs.cloudflare.com;"
Povolení načítání css stylů z domény a CDN CloudFlare.
Header set Content-Security-Policy "upgrade-insecure-requests;"
Jakékoliv zdroje s adresou http bude prohlížeč načítat přes zabezpečené HTTPS. Toto nastavení se hodí při přechodu webu na https komunikaci, kdy nejsme schopni změnit všechny původní absolutní odkazy "http://".
Nefunguje však v IE a Edge do verze 16 (CanIUse info).
add_header Content-Security-Policy "default-src 'self'; script-src 'self' www.google-analytics.com"
<head> ... <!-- CSP meta tags --> <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> <meta http-equiv="Content-Security-Policy" content="style-src 'self' https://maxcdn.bootstrapcdn.com; img-src 'self'"> ... </head>
V tagu <meta> lze hlavičky CSP rozdělit. Platí však vždy ta nejstriktnější nastavená politika!
Chybná konfigurace složitějšího nastavení CSP je naprosto běžná. Z toho důvodu je vhodné použít hlavičku Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive>
, která umožňuje vývojářům experimentovat s nastavením a sledovat chování vytvořených politik, aniž by došlo k jejich provedení. Prohlížeč hlavičku obdrží, zpracuje jí a bude se řídit definovanými pravidly, ale místo exekuce zajistí zpětnou vazbu o výsledku nastavení ve vývojářské konzoli.
Doporučené hlavičky pro webové stránky.
Sponzor hlavičky CSP