Čeština

Naučte se, jak Content Security Policy (CSP) účinně zmírňuje útoky Cross-Site Scripting (XSS) a zlepšuje zabezpečení webu pro globální publikum.

Content Security Policy (CSP): Komplexní průvodce prevencí XSS

V dnešním digitálním prostředí je zabezpečení webu prvořadé. Útoky Cross-Site Scripting (XSS) zůstávají rozšířenou a nebezpečnou hrozbou pro webové aplikace po celém světě. Content Security Policy (CSP) je výkonná hlavička HTTP odpovědi, která poskytuje další vrstvu zabezpečení a pomáhá zmírnit riziko zranitelností XSS. Tato příručka nabízí komplexní přehled CSP, její implementaci a osvědčené postupy pro ochranu vašich webových aplikací před útoky XSS.

Co je Cross-Site Scripting (XSS)?

Cross-Site Scripting (XSS) je typ injekčního útoku, při kterém jsou škodlivé skripty vkládány do jinak neškodných a důvěryhodných webových stránek. Útoky XSS nastávají, když útočník použije webovou aplikaci k odeslání škodlivého kódu, obvykle ve formě skriptu na straně prohlížeče, jinému koncovému uživateli. Chyby, které umožňují úspěch těchto útoků, jsou poměrně rozšířené a vyskytují se všude tam, kde webová aplikace používá vstup od uživatele ve výstupu, který generuje, bez jeho validace nebo kódování.

Existují tři hlavní typy útoků XSS:

Útoky XSS mohou mít vážné následky, včetně:

Co je Content Security Policy (CSP)?

Content Security Policy (CSP) je přidaná vrstva zabezpečení, která pomáhá detekovat a zmírňovat určité typy útoků, včetně útoků Cross-Site Scripting (XSS) a útoků vkládáním dat. CSP je implementována pomocí hlavičky HTTP odpovědi, která vám umožňuje řídit zdroje (např. skripty, styly, obrázky, fonty, rámce), které prohlížeč smí načíst pro konkrétní stránku. Defináním přísné CSP můžete výrazně snížit útočnou plochu vaší webové aplikace a ztížit útočníkům vkládání škodlivého kódu.

CSP funguje definováním bílé listiny zdrojů, ze kterých prohlížeč smí načítat zdroje. Jakýkoli zdroj načtený ze zdroje, který není výslovně povolen v CSP, bude prohlížečem zablokován. Tím se zabrání spouštění neautorizovaných skriptů a sníží se riziko útoků XSS.

Jak CSP funguje: Direktivy a zdroje

CSP se konfiguruje pomocí sady direktiv, z nichž každá určuje politiku pro konkrétní typ zdroje. Každá direktiva se skládá z názvu následovaného seznamem povolených zdrojů. Zde jsou některé z nejčastěji používaných direktiv CSP:

Běžně používané hodnoty zdrojů zahrnují:

Implementace CSP

CSP lze implementovat dvěma hlavními způsoby:

  1. HTTP hlavička: Preferovaný způsob je nakonfigurovat váš webový server tak, aby odesílal HTTP hlavičku `Content-Security-Policy`. To vám umožní definovat CSP pro každou stránku nebo zdroj na vašem webu.
  2. <meta> značka: CSP lze také definovat pomocí <meta> značky v sekci <head> vašeho HTML dokumentu. Tato metoda je však méně flexibilní a má omezení ve srovnání s použitím HTTP hlavičky. Například direktivy `frame-ancestors`, `sandbox` a `report-uri` nelze použít v HTML meta značkách.

Použití HTTP hlavičky

Chcete-li implementovat CSP pomocí HTTP hlavičky, musíte nakonfigurovat svůj webový server tak, aby zahrnoval hlavičku `Content-Security-Policy` ve svých odpovědích. Konkrétní kroky konfigurace se budou lišit v závislosti na použitém webovém serveru.

Zde jsou příklady pro běžné webové servery:

Použití <meta> značky

Chcete-li implementovat CSP pomocí <meta> značky, přidejte následující značku do sekce <head> vašeho HTML dokumentu:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://example.com; img-src 'self' data:;">

Důležité úvahy:

Příklady CSP

Zde je několik příkladů CSP s vysvětlením:

  1. Základní CSP:
  2. Content-Security-Policy: default-src 'self';

    Tato politika povoluje pouze zdroje ze stejného původu.

  3. Povolení skriptů z konkrétní domény:
  4. Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com;

    Tato politika povoluje zdroje ze stejného původu a skripty z `https://example.com`.

  5. Povolení stylů z CDN:
  6. Content-Security-Policy: default-src 'self'; style-src 'self' https://cdn.example.com;

    Tato politika povoluje zdroje ze stejného původu a styly z `https://cdn.example.com`.

  7. Povolení obrázků z jakéhokoli zdroje:
  8. Content-Security-Policy: default-src 'self'; img-src *;

    Tato politika povoluje zdroje ze stejného původu a obrázky z jakéhokoli zdroje (nedoporučeno pro produkci).

  9. Hlášení o porušení CSP:
  10. Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint;

    Tato politika povoluje zdroje ze stejného původu a odesílá zprávy o porušení na `/csp-report-endpoint`. Doporučuje se použít `report-to` místo `report-uri`.

  11. Použití `report-to` a `report-uri` společně pro kompatibilitu:
  12. Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint; report-to csp-endpoint;
    Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint; report-to csp-endpoint;
    Report-To: {"group":"csp-endpoint","max_age":10886400,"endpoints":[{"url":"/csp-report-endpoint"}]}

    Tento příklad ukazuje nastavení koncového bodu `report-uri` (pro starší prohlížeče) a `report-to`, spolu s konfigurací samotné hlavičky `Report-To`. Ujistěte se, že váš server správně zpracovává hlavičku `Report-To`, nastavuje správně `group`, `max_age` a `endpoints`.

  13. Použití Nonce pro inline skripty:
  14. Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-rAnd0mN0nc3Str1nG';

    Tato politika povoluje zdroje ze stejného původu a inline skripty s odpovídajícím atributem nonce.

    <script nonce="rAnd0mN0nc3Str1nG">
      // Váš kód inline skriptu zde
    </script>

CSP v režimu pouze pro hlášení

CSP lze implementovat ve dvou režimech:

Režim pouze pro hlášení je užitečný pro testování a ladění vaší CSP před jejím vynucením. Pro povolení režimu pouze pro hlášení použijte hlavičku HTTP `Content-Security-Policy-Report-Only` místo hlavičky `Content-Security-Policy`.

Příklad:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint;

Tato konfigurace odešle zprávy na `/csp-report-endpoint` bez blokování jakýchkoli zdrojů.

Osvědčené postupy pro implementaci CSP

Zde jsou některé osvědčené postupy pro efektivní implementaci CSP:

  1. Začněte s přísnou politikou: Začněte s restriktivní politikou, která povoluje zdroje pouze ze stejného původu, a postupně ji uvolňujte podle potřeby.
  2. Používejte Nonce nebo Hashe pro inline skripty a styly: Vyhněte se používání `'unsafe-inline'` a používejte noncy nebo hashe pro povolení konkrétních inline skriptů a stylů.
  3. Vyhněte se `'unsafe-eval'`: Pokud je to možné, vyhněte se používání `'unsafe-eval'`, protože může představovat bezpečnostní rizika. Zvažte alternativní přístupy pro dynamické provádění kódu.
  4. Používejte HTTPS: Zajistěte, aby byly všechny zdroje načítány přes HTTPS, aby se zabránilo útokům typu man-in-the-middle. Použijte direktivu `upgrade-insecure-requests` k automatickému upgradu nebezpečných požadavků.
  5. Monitorujte porušení CSP: Nastavte koncový bod pro hlášení, abyste mohli monitorovat porušení CSP a identifikovat potenciální bezpečnostní problémy.
  6. Důkladně otestujte svou CSP: Otestujte svou CSP v různých prohlížečích a prostředích, abyste zajistili, že funguje podle očekávání.
  7. Iterujte a vylepšujte: Implementace CSP je iterativní proces. Neustále monitorujte a vylepšujte svou CSP, jak se vaše aplikace vyvíjí.
  8. Zvažte direktivu `strict-dynamic`: Použijte `strict-dynamic` ke snížení složitosti vaší CSP propagací důvěry na skripty načtené důvěryhodnými skripty.

Nástroje pro CSP

Několik nástrojů vám může pomoci generovat, testovat a monitorovat CSP:

CSP a frameworky/knihovny

Při používání frameworků a knihoven je důležité správně nakonfigurovat CSP, abyste zajistili kompatibilitu a předešli bezpečnostním problémům. Zde jsou některé úvahy:

CSP a CDN (Content Delivery Networks)

CDN se běžně používají k hostování statických prostředků, jako jsou soubory JavaScript, styly CSS a obrázky. Chcete-li povolit zdroje z CDN ve vaší CSP, musíte explicitně přidat domény CDN na bílou listinu.

Příklad:

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.jsdelivr.net; style-src 'self' https://cdnjs.cloudflare.com;

Tato politika povoluje skripty z jsDelivr a styly z cdnjs od Cloudflare.

Běžné chyby CSP, kterým je třeba se vyhnout

Zde jsou některé běžné chyby CSP, kterým je třeba se vyhnout:

Pokročilé koncepty CSP

Kromě základů může několik pokročilých konceptů CSP dále zvýšit vaše zabezpečení webu:

Budoucnost CSP

CSP se neustále vyvíjí, aby řešila nové bezpečnostní výzvy. Budoucí vývoj může zahrnovat:

Závěr

Content Security Policy (CSP) je mocný nástroj pro zmírňování útoků XSS a zlepšení zabezpečení webu. Definování přísné CSP můžete výrazně snížit útočnou plochu vaší webové aplikace a ochránit vaše uživatele před škodlivým kódem. Efektivní implementace CSP vyžaduje pečlivé plánování, důkladné testování a neustálé monitorování. Dodržováním osvědčených postupů uvedených v této příručce můžete využít CSP ke zlepšení bezpečnostního postavení svých webových aplikací a zabezpečit svou online přítomnost v globálním digitálním ekosystému.

Nezapomeňte pravidelně kontrolovat a aktualizovat svou CSP, abyste se přizpůsobili vyvíjejícím se bezpečnostním hrozbám a zajistili, že vaše webové aplikace zůstanou chráněny.