Přejít na obsah

AktuálněKritické chyby v PHP a Node.js z 21. 10. Týkají se i vás?Otestovat verzi

Kontrola bezpečnostních hlaviček

Které bezpečnostní hlavičky má web posílat a jak si je zkontrolovat?

Krátká odpověď

Bezpečnostní hlavičky jsou pokyny, které web přidá do odpovědi a kterými prohlížeči řekne, co na stránce nedovolit. Tegmia čte z odpovědi vašeho webu sedm z nich — Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options, Referrer-Policy, ochranu proti vložení do rámu, Permissions-Policy a hlavičky prozrazující verzi serveru — a k tomu příznaky u cookies. Žádná z nich není oprava zranitelnosti; jsou to levná opatření, která zmenšují dopad chyby, která se stane později.

Patří do kontroly Hlavičky a konfigurace HTTPS.

Co to je

Content-Security-Policy je z té sedmičky jediná, která vyžaduje přípravu, a zároveň jediná, která zastaví vložený cizí skript. Zavádí se v režimu hlášení, pak se zapne vynucování.

Strict-Transport-Security zavírá mezeru v prvním spojení; má vlastní stránku, protože s ní jde nejvíc rozbít.

Zbytek je nastavení na jeden řádek: nosniff, Referrer-Policy, frame-ancestors nebo X-Frame-Options, Permissions-Policy a tišší hlavička Server.

U cookies nejde o hlavičku, ale o příznaky: Secure, HttpOnly a SameSite. Přihlašovací cookie bez nich je nejkratší cesta od chyby na webu ke krádeži přihlášení.

Jak to Tegmia měří

Co kontrola skutečně dělá, s prahy, na kterých hlásí nález.

  • Pošleme nejvýš pět požadavků GET na úvodní stránku (každé přesměrování je jeden, nejvýš čtyři) a jeden navíc na http://. Tělo odpovědi zahazujeme, jakmile dorazí hlavičky — obsah webu nestahujeme.
  • Každý skok přesměrování znovu přeložíme a ověříme, že míří na veřejnou adresu. Přesměrování nás nemůže zavést do vnitřní sítě.
  • Hlásíme nepřítomnost: http.csp_missing, http.xcto_missing (nebo nečekanou hodnotu místo nosniff), http.referrer_policy_missing, http.permissions_policy_missing.
  • Ochranu proti vložení do rámu uznáme dvěma způsoby — hlavičkou X-Frame-Options nebo direktivou frame-ancestors v CSP. Chybí-li obojí, hlásíme http.frame_protection_missing.
  • Hlavičky Server a X-Powered-By hlásíme jen tehdy, když obsahují číslo verze (http.server_banner_verbose). Samotné jméno serveru za nález nepovažujeme.
  • U každé cookie z odpovědi čteme příznaky a hlásíme chybějící Secure, HttpOnly a SameSite zvlášť, s názvem cookie v důkazu.
  • Celá sada hlaviček, kterou jsme dostali, i řetěz přesměrování jsou součástí důkazu. Hlásíme se jako Tegmia-Checker a spojení nerecyklujeme.
  • Když úvodní stránka odpoví chybou serveru (5xx), odmítnutím nebo omezením (401, 403, 407, 408, 425, 429), hlavičky nečteme: nepatří webu, ale tomu, kdo odpověděl. Běh skončí jako chyba měření a zjištění necháme, jak byla.
  • Když je všechno v pořádku, zapíšeme http.headers_ok, aby bylo vidět, že kontrola proběhla a nic nenašla.

Co tím nezměříme

  • Čteme úvodní stránku domény, ne celý web. Jiná sekce může mít hlavičky jinak.
  • Obsah CSP nevyhodnocujeme — nerozlišíme politiku, která skutečně brání, od politiky, která je tam pro forma s „unsafe-inline“.
  • Cookies vidíme jen ty, které web pošle nepřihlášenému návštěvníkovi na úvodní stránce.

Co z toho může vzejít za zjištění

Přímo z katalogu. Stejný text uvidíte i v hlášení.

Chybí Content-Security-Policy

Střední

http.csp_missing · Hlavičky a konfigurace HTTPS

CSP je nejúčinnější obrana proti vloženému cizímu skriptu (XSS) a proti podvrženému obsahu z cizí domény. Bez ní se takový útok projeví v plné síle.

Co udělat: Zaveďte CSP postupně: nejdřív v režimu Content-Security-Policy-Report-Only, vyhodnoťte hlášení a pak přepněte na vynucování.

Výchozí závažnost střední: Naplánujte do měsíce. Samo o sobě nestačí k útoku, ale usnadňuje ho. Celé pravidlo v katalogu

Chybí ochrana proti vložení do cizího rámu

Nízké

http.frame_protection_missing · Hlavičky a konfigurace HTTPS

Cizí web může váš obsah zobrazit ve svém rámu a přelepit ho tak, aby uživatel klikl na něco jiného, než vidí (clickjacking).

Co udělat: Přidejte do CSP direktivu frame-ancestors self, případně hlavičku X-Frame-Options: SAMEORIGIN.

Výchozí závažnost nízké: Doladění. Bez bezprostředního rizika, zlepší to celkový stav. Celé pravidlo v katalogu

Chybí X-Content-Type-Options

Nízké

http.xcto_missing · Hlavičky a konfigurace HTTPS

Bez této hlavičky může prohlížeč odhadovat typ souboru a spustit jako skript něco, co jím být nemá.

Co udělat: Přidejte hlavičku X-Content-Type-Options: nosniff.

Výchozí závažnost nízké: Doladění. Bez bezprostředního rizika, zlepší to celkový stav. Celé pravidlo v katalogu

Chybí Referrer-Policy

Nízké

http.referrer_policy_missing · Hlavičky a konfigurace HTTPS

Prohlížeč může cizím webům posílat celou adresu, ze které uživatel odešel. V adresách bývají interní identifikátory i tokeny.

Co udělat: Přidejte Referrer-Policy: strict-origin-when-cross-origin.

Výchozí závažnost nízké: Doladění. Bez bezprostředního rizika, zlepší to celkový stav. Celé pravidlo v katalogu

Chybí Permissions-Policy

Informace

http.permissions_policy_missing · Hlavičky a konfigurace HTTPS

Hlavička omezuje, které citlivé funkce prohlížeče (kamera, mikrofon, poloha) smí stránka a vložený cizí obsah používat.

Co udělat: Přidejte Permissions-Policy a vypněte funkce, které web nepotřebuje, například camera=(), microphone=(), geolocation=().

Výchozí závažnost informace: Jen zjištěný fakt o vašem prostředí. Není to chyba. Celé pravidlo v katalogu

Server zveřejňuje přesnou verzi software

Informace

http.server_banner_verbose · Hlavičky a konfigurace HTTPS

Verze v hlavičce sama o sobě není zranitelnost, ale útočníkovi ušetří práci při hledání cíle. Skrýt ji je levné.

Co udělat: Omezte hlavičky Server a X-Powered-By na obecnou hodnotu, nebo je vypněte.

Výchozí závažnost informace: Jen zjištěný fakt o vašem prostředí. Není to chyba. Celé pravidlo v katalogu

Cookie bez příznaku Secure

Střední

http.cookie_missing_secure · Hlavičky a konfigurace HTTPS

Takovou cookie prohlížeč pošle i po nezabezpečeném spojení. Pokud jde o přihlašovací cookie, dá se ukrást odposlechem.

Co udělat: Doplňte u všech cookies příznak Secure.

Výchozí závažnost střední: Naplánujte do měsíce. Samo o sobě nestačí k útoku, ale usnadňuje ho. Celé pravidlo v katalogu

Cookie bez příznaku HttpOnly

Střední

http.cookie_missing_httponly · Hlavičky a konfigurace HTTPS

K takové cookie se dostane JavaScript na stránce. Při úspěšném XSS to znamená přímou krádež přihlášení.

Co udělat: Doplňte HttpOnly u cookies, které čtený JavaScript nepotřebuje (typicky přihlašovací).

Výchozí závažnost střední: Naplánujte do měsíce. Samo o sobě nestačí k útoku, ale usnadňuje ho. Celé pravidlo v katalogu

Cookie bez příznaku SameSite

Nízké

http.cookie_missing_samesite · Hlavičky a konfigurace HTTPS

Bez SameSite může cizí web vyvolat akci ve vašem jménu (CSRF).

Co udělat: Nastavte SameSite=Lax, u citlivých operací SameSite=Strict.

Výchozí závažnost nízké: Doladění. Bez bezprostředního rizika, zlepší to celkový stav. Celé pravidlo v katalogu

Typická chybná konfigurace

Hlavičky nastavené na jednom místě a chybějící na jiném. Web běží za reverzní proxy nebo CDN, hlavičky se přidávají v aplikaci — a statické soubory, chybové stránky nebo administrace jdou jinou cestou, kde nikdo nic nepřidává.

Druhá typická situace: CSP se nasadí hned v režimu vynucování a rozbije platební tlačítko, mapu nebo analytiku. Po hodině se vypne a pak už se k ní nikdo nevrátí. Proto se zavádí v režimu Report-Only.

Jak to opravit

Konkrétní kroky v pořadí, ve kterém mají smysl.

  1. 01Zjistěte, kde se hlavičky dají nastavit pro celý web — ve webovém serveru, v proxy, nebo v aplikaci. Rozhodněte se pro jedno místo.
  2. 02Přidejte levné hlavičky: X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin, X-Frame-Options: SAMEORIGIN a Permissions-Policy s vypnutými funkcemi, které web nepotřebuje.
  3. 03U cookies doplňte Secure a u všech, které JavaScript nečte, i HttpOnly. SameSite nastavte na Lax, u citlivých operací na Strict.
  4. 04Z hlaviček Server a X-Powered-By odeberte číslo verze, nebo je vypněte.
  5. 05Teprve pak CSP: nasaďte Content-Security-Policy-Report-Only, několik dní sbírejte hlášení a doplňte zdroje, které web legitimně používá.
  6. 06Pak CSP přepněte na vynucování a nechte si zkontrolovat, co server opravdu odpovídá — ne co má podle konfigurace odpovídat.

Jak to vypadá

Hodnoty tak, jak je zapíšete nebo uvidíte.

Typ souboru se nehádá

X-Content-Type-Options: nosniff

Odkud uživatel přišel

Referrer-Policy: strict-origin-when-cross-origin

Co web nepotřebuje, je vypnuté

Permissions-Policy: camera=(), microphone=(), geolocation=()

Zkontrolovat to na své doméně

Čteme jen to, co doména zveřejnila.

Sken přečte veřejné záznamy a konfiguraci domény a ukáže výsledek téhle kontroly u vás, včetně důkazu, ze kterého jsme vycházeli.

Situace, které to řeší

Související kontroly

Co se k tomu váže a dělá se obvykle spolu.

  • Kontrola HSTS

    Co hlavička Strict-Transport-Security zavírá za mezeru, jakou hodnotu max-age čekáme a kdy HSTS nezapínat.

  • Kontrola přesměrování z HTTP na HTTPS

    Jak se měří, že web nezůstane na nezabezpečeném spojení, a proč bývá varianta s www zapomenutá.

  • Kontrola SSL certifikátu

    Co se dá o certifikátu zjistit jedním TLS spojením: vydavatel, doménová jména, síla klíče, verze protokolu.

Naposledy upraveno 3. listopadu 2026. Stránku píšeme ručně a opravujeme ji, když se změní to, co měříme. Našli jste tu chybu? Napište na kontakt.