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 HSTS

Co je HSTS, jakou má mít hodnotu max-age a kdy ho nezapínat?

Krátká odpověď

HSTS je hlavička Strict-Transport-Security, kterou web prohlížeči řekne: na tuhle doménu se příště připoj jen přes HTTPS, i když ti někdo podstrčí odkaz s http. Tegmia čte, jestli hlavička v odpovědi je, a jak dlouhou má platnost: chybí-li, hlásíme nález se střední závažností; je-li max-age pod 180 dní, hlásíme nález s nízkou závažností, protože si prohlížeč pravidlo nepamatuje dost dlouho.

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

Co to je

Bez HSTS zůstává mezera i webu, který přesměrovává správně: první pokus o spojení jde přes HTTP a teprve odpověď ho pošle na HTTPS. Tenhle jeden požadavek jde zachytit a přepsat.

HSTS tu mezeru zavře, ale platí dopředu: prohlížeč si pravidlo pamatuje po dobu max-age. Doporučená hodnota je 31536000 sekund, tedy rok.

Direktiva includeSubDomains rozšíří pravidlo na všechny subdomény. To je ta část, se kterou se dá nejvíc rozbít — pokud některá subdoména HTTPS neumí, přestane být po zapnutí dostupná a zpátky to nejde hned vzít.

Preload seznam v prohlížečích je ještě silnější a ještě méně odvolatelný. Nezapisujte se do něj dřív, než HSTS s ročním max-age bez problémů poběží.

Jak to Tegmia měří

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

  • Čteme hlavičku Strict-Transport-Security z odpovědi na úvodní stránku přes HTTPS.
  • Když hlavička chybí, hlásíme http.hsts_missing se střední závažností.
  • Když je, přečteme z ní hodnotu max-age. Pod 15 552 000 sekund (180 dní) hlásíme http.hsts_short_max_age s nízkou závažností a do zjištění napíšeme naměřenou hodnotu i doporučených 31 536 000.
  • Hodnotu hlavičky ukládáme celou, takže je v důkazu vidět i includeSubDomains a preload.

Co tím nezměříme

  • Nekontrolujeme, jestli je doména v preload seznamu prohlížečů.
  • Nehlásíme chybějící includeSubDomains jako nález. Pro část domén je to správná konfigurace a nálezem by to bylo falešné obvinění.
  • Neověřujeme, že všechny subdomény HTTPS skutečně umějí — to z jedné odpovědi nezjistíme.

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

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

Chybí hlavička HSTS

Střední

http.hsts_missing · Hlavičky a konfigurace HTTPS

Bez HSTS se prohlížeč při prvním pokusu může připojit nezabezpečeně, i když přesměrování existuje. HSTS tuto mezeru zavírá.

Co udělat: Přidejte hlavičku Strict-Transport-Security: max-age=31536000; includeSubDomains. Nejdřív ověřte, že všechny subdomény umí HTTPS.

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

HSTS má velmi krátkou platnost

Nízké

http.hsts_short_max_age · Hlavičky a konfigurace HTTPS

Krátká hodnota max-age snižuje účinnost ochrany, protože si prohlížeč pravidlo nepamatuje dost dlouho.

Co udělat: Zvyšte max-age na 31536000 (jeden rok), jakmile máte HTTPS stabilní.

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

Krátké max-age, které zůstalo z testování. Při zavádění se hodnota správně nastaví na pár minut, aby se dalo couvnout. Pak se zapomene zvýšit a ochrana je zhruba taková, jako kdyby tam hlavička nebyla.

Druhá chyba je naopak příliš odvážný start: includeSubDomains a preload rovnou s ročním max-age, dokud ještě některá subdoména — interní nástroj, starý testovací web — jede po HTTP. Ta pak zmizí a návrat trvá týdny.

Jak to opravit

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

  1. 01Nejdřív ověřte, že přesměrování z HTTP na HTTPS funguje na všech variantách domény.
  2. 02Sepište subdomény a u každé zjistěte, jestli umí HTTPS. Rozhodnutí o includeSubDomains se dělá z tohoto seznamu, ne z odhadu.
  3. 03Zapněte hlavičku s krátkou platností, například max-age=300, a ověřte, že nic nespadlo.
  4. 04Zvyšte na max-age=31536000 a podle výsledku předchozího bodu přidejte includeSubDomains.
  5. 05Preload seznam až nakonec, a jen když jste si jistí, že žádná subdoména nikdy nebude muset běžet po HTTP.

Jak to vypadá

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

Doporučená hodnota

Strict-Transport-Security: max-age=31536000; includeSubDomains

Hodnota na vyzkoušení

Strict-Transport-Security: max-age=300

Krátká platnost je správná jen po dobu zavádění.

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.

Naposledy upraveno 22. října 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.