CSP je bezpečnostní standard implementovaný v moderních webových prohlížečích. Umožňuje majitelům webových stránek deklarovat, které zdroje (např. skripty, styly, obrázky) jsou považovány za důvěryhodné a odkud se smí do prohlížeče načítat. Tím se drasticky snižuje možnost útočníka spustit na webu škodlivý kód, i kdyby se mu ho podařilo do stránky „podstrčit“.
CSP funguje na principu „povolujících seznamů“ (whitelisting). Server pošle prohlížeči v hlavičce HTTP odpovědi instrukce, které definují pravidla pro danou stránku. Pokud se prohlížeč pokusí načíst skript z adresy, která není na seznamu, zablokuje jej a nahlásí chybu v konzoli.
Content-Security-Policy: default-src 'self'; img-src *; script-src trusted.com
* default-src 'self': Všechno se smí načítat pouze z vlastní domény.
* img-src *: Obrázky se smí načítat odkudkoliv.
* script-src trusted.com: Skripty se smí načítat pouze z domény trusted.com.
frame-ancestors určuje, zda a kde může být stránka vložena do rámce (iframe).upgrade-insecure-requests.| Direktiva | Význam |
|---|---|
| script-src | Definuje povolené zdroje pro JavaScript. |
| style-src | Definuje povolené zdroje pro CSS soubory. |
| img-src | Definuje, odkud se smí stahovat obrázky. |
| connect-src | Omezuje cíle, na které může web posílat data (např. přes Fetch nebo WebSocket). |
| frame-ancestors | Určuje, které weby smí tuto stránku vložit do <iframe>. |
Zavádění CSP na existující velký web je náročné, protože přísná pravidla mohou web „rozbít“. Proto existuje režim Content-Security-Policy-Report-Only. V tomto režimu prohlížeč:
1. Nic neblokuje. 2. Všechna porušení pravidel pouze nahlásí na zadanou URL (JSON report).
Vývojáři tak mohou vyladit pravidla bez rizika pro uživatele.
Související pojmy: OWASP, XSS, HTTP, HTTPS, ModSecurity, WAF, Clickjacking.