HSTS je hlavička odezvy zabezpečení webu. Název je zkratkou pro „HTTP Strict Transport Security“. Funkcí hlavičky HSTS je donutit prohlížeče, aby se připojovaly k webovým stránkám pomocí HTTPS.
Tip: HTTPS používá šifrování k zabezpečení vašeho webového připojení před hackery, kteří se jej snaží upravit nebo monitorovat. HTTP tyto ochrany nemá, takže hacker na správném místě může sledovat a upravovat váš HTTP provoz.
Záhlaví webové odpovědi je část metadat odeslaná serverem, když odpovídá na webové požadavky. Podmnožina těchto hlaviček se často označuje jako bezpečnostní hlavičky, protože jejich účelem je zvýšit bezpečnost webu a uživatele.
Hlavička HSTS má dvě povinné části a dvě volitelné. Název záhlaví „Strict-Transport-Security“ a poté operátor a hodnota „max-age“ jsou povinné. Někdy se také používá další dvojice operátorů „includeSubDomains“ a „preload“.
Když prohlížeč obdrží odpověď HTTPS s hlavičkou HSTS, dostane pokyn, aby se připojil k této webové stránce a všem zdrojům na ní, a to výhradně pomocí HTTPS po dobu trvání časovače „max-age“. „Max-age“ je proměnná, která popisuje, jak dlouho si musí prohlížeč pamatovat nastavení. Hodnota „max-age“ je uvedena v sekundách, doporučená hodnota je „31536000“, což je jeden rok.
Myšlenka je taková, že během trvání tohoto časovače, který se resetuje při každém dalším načtení stránky, bude prohlížeč vyžadovat připojení HTTPS a odmítne jakékoli zdroje HTTP. To chrání před útoky typu person-in-the-middle, kdy hacker mezi vámi a webovým serverem může manipulovat s odpověďmi, které dostáváte.
Hlavním bodem, ve kterém vás to chrání, je první připojení. Obvykle, když se připojíte k webu, můžete požádat o web HTTP a poté být přesměrován na web HTTPS. Bohužel, hacker v pozici person-in-the-middle by mohl tomuto upgradu na HTTPS zabránit a mohl by pak ukrást nebo sledovat vaši aktivitu na webu. Jakmile však prohlížeč uvidí záhlaví HSTS, váš prohlížeč vytvoří i první připojení přes HTTPS, čímž vás ochrání před hackery.
HSTS také zabraňuje načítání jakýchkoli nezabezpečených zdrojů, které by také mohly být útočníkem se zlými úmysly upraveny, pokud by byly doručeny přes HTTP.
Operátor „includeSubDomains“ se používá k označení, že záhlaví by se mělo vztahovat také na všechny subdomény webu.
Seznam předběžného načtení HSTS
Můžete si všimnout, že HSTS vás stále nechrání při prvním připojení k webu. Zde přichází na řadu operátor „předpětí“. Webové stránky se mohou samy přihlásit k zařazení do seznamu předběžného načtení HSTS, v takovém případě je povinným ukazatelem operátor „přednačtení“. Seznam předběžného načtení HSTS je pravidelně aktualizován a ukládán v prohlížeči, pokud je do něj zahrnuta stránka, prohlížeč na ni použije ochranu HSTS. K tomu dochází i při úplně prvním připojení předtím, než prohlížeč vůbec viděl hlavičku odpovědi HSTS.
Tip: Pro přidání do seznamu přednastavení HSTS je vyžadován „maximální věk“ rok nebo více.
Problémy s HSTS
Jedním z hlavních bodů HSTS je, že v případě problémů s připojením HTTPS zobrazí chybovou zprávu. Jako další bezpečnostní opatření se předpokládá, že uživatelé nebudou schopni obejít chybové zprávy HSTS, jak by to bylo možné u běžných chyb HTTPS.
Bohužel to může způsobit problémy, pokud společnost zavede HSTS dříve, než celý web a každý zdroj na něm použitý podporuje HTTPS. V tomto případě se uživatelům začnou zobrazovat chybové zprávy zabezpečení HSTS, které nemohou obejít, což v podstatě zcela rozbije web. Nejhorší na tom je, že pouhé odstranění hlavičky HSTS pro tyto uživatele problém nevyřeší, protože jejich prohlížeč bude nadále vynucovat HSTS po dobu potenciálně měsíce dlouhého „maximálního věku“.
Jako takové je kriticky důležité, aby se při prvním nasazení hlavičky použil krátký „maximální věk“. Pokud se vyskytnou nějaké problémy, přetrvávají po jejich objevení jen krátkou dobu. Až když jste si jisti, že váš web je zcela kompatibilní s HSTS, měli byste nakonfigurovat dlouhý časovač HSTS.
Tip: Je také možné nastavit „maximální věk“ na 0, což v podstatě odstraní uložený záznam HSTS každému, kdo jej uvidí. To může pomoci, pokud dojde k problému, ale ovlivní uživatele pouze tehdy a pokud se rozhodnou zkusit to znovu.