Security Headers: jak chrání webové stránky

Autor: 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čkaK čemu sloužíNa co si dát pozor
Content-Security-PolicyUrč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-SecurityPř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-OptionsPř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-PolicyOmezuje 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-OptionsOmezuje 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í:

  1. 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.
  2. 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.
  3. 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.
  4. Otestujte klíčové činnosti uživatele včetně přihlášení, odeslání formuláře a případně platby.
  5. 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?

Přečtěte si také

Zjistěte, jak PHP-FPM zpracovává požadavky PHP, čím se liší od webového serveru a jak nastavit procesy podle provozu a zdrojů hostingu.
Poznejte BIND, otevřený software pro server DNS: jak spravuje domény, jaké role plní a kdy se vyplatí provozovat vlastní server.
Zjistěte, k čemu slouží polský registr a číslo REGON, jak se liší od NIP a KRS a jak v oficiálním registru ověřit údaje o firmě.