Security Headers: jak chrání webové stránky
Autor: Redakce Domeny.ForSale Zveřejněno
Stručně: Security Headers jsou hlavičky odpovědi HTTP, které prohlížeči předávají pravidla pro bezpečné zpracování stránky. Pomáhají omezovat například spouštění nežádoucích skriptů, vkládání stránky do rámců na cizích webech a prozrazování informací při přecházení mezi weby. Nenahrazují bezpečný kód ani aktualizace, ale představují další vrstvu ochrany.
Jak fungují bezpečnostní hlavičky
Když prohlížeč načítá stránku, server mu posílá její obsah a metadata, tedy informace popisující odpověď. Hlavičky HTTP jsou součástí těchto metadat. V textu stránky se nezobrazují, ale prohlížeč podle nich může omezit způsob využívání přijatých zdrojů.
Bezpečnostní hlavičky mohou přikazovat použití šifrovaného spojení, určovat povolené zdroje skriptů nebo zakazovat vložení stránky do rámce na jiném webu. Obvykle se nastavují v konfiguraci serveru, aplikace, reverzní proxy nebo CDN, tedy infrastruktury zprostředkující doručování obsahu.
Tato ochranná pravidla vynucuje především prohlížeč. Nebrání přímému odesílání požadavků do aplikace jinými nástroji, a proto nenahrazují kontrolu oprávnění na serveru.
Nejdůležitější Security Headers a jejich využití
Neexistuje jedna sada nastavení vhodná pro každý web. Následující hlavičky řeší různé hrozby a je nutné je přizpůsobit fungování webu.
| Hlavička | K čemu slouží | Na co si dát pozor |
|---|---|---|
Content-Security-Policy | Určuje mimo jiné povolené zdroje skriptů, stylů a dalších prostředků. | Příliš přísná politika může zablokovat formulář, platby nebo analytiku. |
Strict-Transport-Security | Přikazuje prohlížeči používat HTTPS po stanovenou dobu. | Dlouhá doba platnosti a zahrnutí subdomén vyžadují přípravu celé infrastruktury. |
X-Content-Type-Options | Při hodnotě nosniff omezuje odhadování typu zdroje v rozporu s údajem ze serveru. | Server musí posílat správnou hlavičku Content-Type, například pro skripty a šablony stylů. |
Referrer-Policy | Řídí, jaké informace o adrese stránky se předávají v hlavičce Referer. | Nastavení by mělo zohledňovat soukromí a potřeby integrací. |
Permissions-Policy | Omezuje přístup k vybraným funkcím prohlížeče, například ke kameře nebo geolokaci. | Podpora jednotlivých direktiv závisí na prohlížeči. |
X-Frame-Options | Omezuje vkládání stránky do rámců. | Nabízí méně pružné možnosti než direktiva frame-ancestors v CSP. |
CSP neboli Content Security Policy pomáhá omezovat následky XSS — útoků spočívajících ve spuštění nežádoucího kódu v kontextu stránky. Samotný seznam důvěryhodných domén nezajišťuje úplnou ochranu: záleží na konkrétních direktivách, způsobu načítání skriptů a na tom, aby výjimky nebyly příliš široké.
Ochranu před clickjackingem, tedy přiměním uživatele ke kliknutí na prvek stránky skryté v cizím webu, zajišťuje mimo jiné direktiva frame-ancestors v CSP. Může vkládání stránky zcela zakázat nebo je povolit jen na určených webech.
Příklad: stránka s formulářem a externími službami
Předpokládejme, že firemní web používá kontaktní formulář, mapu a externí analytický nástroj. Zavedení CSP, která povoluje pouze zdroje z vlastní domény, může vyřadit mapu i analytiku. Před nasazením je proto nutné zjistit, odkud stránka načítá skripty, styly, obrázky a rámce a kam odesílá požadavky.
Pokud se web nemá vkládat do žádného rámce, příslušná část politiky může vypadat takto:
Content-Security-Policy: frame-ancestors 'none'
Jde pouze o pravidlo pro vkládání do rámců, nikoli o úplnou politiku CSP. Neomezuje zdroje skriptů ani síťová připojení. Pokud už stránka CSP používá, je třeba pravidlo promyšleně začlenit do stávající konfigurace, nikoli bez ověření přidávat další politiku.
U stránky, která nepotřebuje kameru ani mikrofon, lze zvážit:
Permissions-Policy: camera=(), microphone=()
Toto nastavení nekopírujte do aplikace pro videohovory. Dobře nastavená hlavička omezuje nepotřebné možnosti, nikoli funkce nezbytné pro uživatele.
Jak hlavičky zkontrolovat a bezpečně nasadit
Nejjednodušší je otevřít vývojářské nástroje prohlížeče, přejít na kartu se síťovými požadavky, obnovit stránku a vybrat požadavek na hlavní dokument. V části s hlavičkami odpovědi lze ověřit, co prohlížeč skutečně obdržel. Samotná přítomnost nastavení v konfiguraci serveru ještě neznamená, že se hlavička dostane k uživateli.
Praktický postup nasazení:
- Zkontrolujte reprezentativní adresy: úvodní stránku, přihlášení, formuláře a chybové stránky. Odpovědi mohou procházet různými vrstvami infrastruktury.
- Určete, kde hlavičky spravujete. Aplikace, server a CDN by neměly neúmyslně přepisovat nastavení ani přidávat protichůdná pravidla.
- Připravte CSP v režimu
Content-Security-Policy-Report-Only. Umožňuje sledovat porušení pravidel bez blokování zdrojů; sběr hlášení vyžaduje další konfiguraci. - Otestujte klíčové činnosti uživatele včetně přihlášení, odeslání formuláře a případně platby.
- Zapněte vynucování politiky a po nasazení sledujte chyby.
HSTS, tedy mechanismus aktivovaný hlavičkou Strict-Transport-Security, nasazujte až ve chvíli, kdy správně funguje HTTPS. Parametr includeSubDomains zahrnuje také subdomény, proto před jeho použitím zkontrolujte i méně zjevné služby. Aktuální syntaxi a podporu direktiv si ověřte v oficiální dokumentaci používané platformy a prohlížečů.
Co vám výsledek bezpečnostního skeneru neřekne
Skener může odhalit chybějící hlavičku nebo rizikovou hodnotu, ale jeho hodnocení nedokazuje, že je aplikace bezpečná. Některé politiky jsou potřebné jen pro určité způsoby použití a jejich přidávání kvůli lepšímu skóre může narušit integrace.
Hlavičky neopraví chybná oprávnění, zranitelnosti databáze ani únik tajných údajů v kódu. Začněte kontrolou skutečných odpovědí svého webu a vyberte jednu změnu, jejíž fungování dokážete před zveřejněním ověřit.
Viz také: Co je CSP?
