1 / 6
Content Security Policy řeší bezpečnost vašeho webu
Veronika Svobodová / 31. 7. 2020
Jak chránit webové stránky a jejich uživatele před útoky? Jedním z opatření, které si s bezpečnostními riziky dokáže poradit, je Content Security Policy (CSP). Pojďme si ho představit.

Co je to Content Security Policy
CSP je bezpečnostní prvek, někdy označovaný také jako hlavička, který chrání webové stránky před útoky. Konkrétně to jsou Cross-site scripting (XSS) a data injection.
Co je to Cross-site scripting (XSS)?
Jde o metodu narušení webových stránek na základě bezpečnostních chyb ve skriptech. Ty útočníkovi umožňují vložit javascriptový kód, kterým může například znefunkčnit stránku, změnit její vzhled nebo získat citlivé údaje uživatelů.
Zjednodušeně řečeno, CSP hlavička prohlížeči určuje, jaké soubory může nahrát a jak. Tím dokáže zamezit vkládání škodlivých funkcí do stránek. Prohlížeč při návštěvě stránky totiž načítá nejen danou stránku, ale také další obsah.
Příklady obsahu, který se načítá
- skripty (pro tlačítka sociálních sítí, pro Google Analytics)
- externí obrázky a videa (Youtube, Vimeo)
- stránky vložené přes iframe (např. kód pro Google Tag Manager)
- webové fonty z Google Fonts
S uvedenými typy obsahu počítáte, protože jste si je na svůj web dali záměrně.
Jak může dojít útoku
Něco jiného je, když hacker nebo robot vloží speciálně upravenou část kódu třeba do textového pole formuláře typu “napište nám”. Může to být také diskusní fórum nebo poznámka v objednávce, zkrátka jakékoli místo, které nemáte ošetřené. Dojde totiž k vyhodnocení kódu a jeho uložení do databáze.

Při každém načtení stránky se pak daný kód zobrazí a vykoná, což může způsobit potíže, jako je například ukradení cookies nebo přesměrování na podvodnou stránku. Kromě toho může vyhodnocení daného scriptu stáhnout i další škodlivé scripty z externích zdrojů. A to určitě nechcete.
Vy jako autor stránky víte, jaké externí zdroje chcete načítat. A právě díky CSP můžete zakázat načítání z jiných než povolených zdrojů.
Jak Content Security Policy funguje?
CSP umožňuje definovat seznam povolených zdrojů/pravidel pro používání kódu nebo knihoven a služeb třetích stran. Předpokládá se, že co není povoleno, je zakázáno. Přidáním meta informací do hlavičky webu můžete nadefinovat seznam povolených zdrojů. Když není externí zdroj definovaný v pravidlech, tak se daný script nestáhne a nevykoná.

CSP si poradí i s inline scripty
Jsou to například JavaScripty vložené do HTML, místo aby byly v samostatném souboru. Typickým příkladem je vložení neošetřeného JavaScriptu přes diskusní příspěvek.
Tento JavaScript může způsobit přesměrování na podvodnou stránku, která vypadá stejně jako stránka původní, ale když zadáte přístupové údaje, tak se odešlou útočníkovi (týká se to třeba bankovnictví a dalších stránek, kde se přihlašujeme: Facebook, e-mailová schránka...).
Ideální by bylo zakázat inline scripty úplně, ale například Google Tag Manager je také inline script, který chcete používat.
Existují dvě možnosti povolení inline scriptu
- V hlavičce definujeme CSP a přidáme klíč, který se nově generuje pro každé načtení stránky. Daný klíč musí být součástí každého inline scriptu, u kterého chceme, aby se vykonal. Pokud by daný klíč chyběl nebo se lišil od toho v hlavičce, tak se inline script nevykoná.
- Další možností je použití hashovacích funkcí. Do hlavičky, kde definujeme CSP, přidáme hash každého inline scriptu, který se má vykonat. Hash je možné označit jako podpis scriptu, který byl vygenerovaný na základě svého obsahu. Když prohlížeč chce vyhodnocovat daný script, tak vygeneruje hash scriptu a podívá se, jestli se daný hash nalézá v hlavičce. Pokud ne, tak ho nevykoná.
Je jen na vás, kterou variantu využijete. První je vhodnější především pro dynamicky generované weby a druhá naopak pro ty statické.
Ještě jedna důležitá věc – Google Tag Manager obchází v případě implementace samotný standard CSP. Pokud sám projde standardem CSP, tak scripty, které jsou v něm vloženy, to již splňovat nemusí.
Content Security Policy jako alternativa stávajících opatření?
Content Security Policy řeší i další problémy, které se v minulosti řešily prostřednictvím starších bezpečnostních opatření. Některá z nich se vám stále vyplatí implementovat, protože CSP nepodporuje Internet Explorer.

Na závěr doplníme, že CSP se stále vyvíjí, aktuální je verze CSP3, ale CSP2 podporuje většina dnešních prohlížečů. Jeho dokumentaci najdete na webu W3C.