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.