Přejít k navigační liště

Zdroják » Zprávičky » Jak vynutit přenos po HTTPS pomocí hlavičky

Jak vynutit přenos po HTTPS pomocí hlavičky

Zprávičky Různé

Nálepky:

Mozilla Firefox implementuje (ve verzi 4) HTTP hlavičku Strict-Transport-Security , která vynutí komunikaci přes rozhraní HTTPS. Pomocí této hlavičky může web dát prohlížeči najevo, že má být kontaktován přes HTTPS, takže prohlížeč může přímo případné „http://“ opravit na „https://“ dřív než pošle dotaz. Podrobnosti přináší Mozilla Hacks.

Komentáře

Subscribe
Upozornit na
guest
2 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
.

Na to se dá použít $_SERVER[‚HTTPS‘] a 301 Moved permanently, a je to.

MilanK

Ne, kvůli tomu to není.

301 z HTTP na HTTPS se dělá běžně, ta hlavička Strict-Transport-Security ale slouží něčemu jinému.

Představte si server http://www.banka.cz. Když se do této banky přihlašujete poprvé, zadáte http://www.banka.cz, browser nejprve zkusí HTTP, dostane 301, přejde na HTTPS a dostane Strict-Transport-Security, tj. obdobu cookie, která nastaví, že od této chvíle do budoucna bude server http://www.banka.cz vždy kontaktovat rovnou přes HTTPS.

Za měsíc, když se díváte znovu do banky, zadáte opět http://www.banka.cz, ale browser rovnou přejde na HTTPS.

Hlavička Strict-Transport-Security chrání proti MITM útoku, který se ale koná až po tom měsíci. Je to jistě častější scénář: útočník se na Vás zaměří v době, kdy už jste server http://www.banka.cz aspoň jednou navštívil.

Normálně (bez Strict-Transport-Security) by při druhém a dalším přístupu (po měsíci a pod.) uživatel opět zadal http://www.banka.cz a browser by zkusil nejprve HTTP. Požadavek (request) se ale nedostane až k serveru banka.cz, zachytí ho útočník a sám se místo toho kontaktuje s bankou přes HTTPS (udělá jakousi proxy HTTP->HTTPS). Pokud si nevšimnete, že Váš broser nepřešel na HTTPS (např. nezežloutl adresní řádek), tak komunikujete celou dobu s bankou přes tohoto útočníka, který vidí veškerou komunikaci. Hlavička Strict-Transport-Security Vás proti takovému útoku ochrání, předpokladem ale je (znovu opakuji) že alespoň jedno předchozí spojení s bankou musí být bez MITM.

Strict-Transport-Security je jistě konečně významným krokem správným směrem, já bych tam ale ještě doplnil informace o certifikátu, kterým si přeje banka.cz být autorizována, tím by se eliminovaly i útoky, kde MITM zfalšuje certifikát (jak se před pár dny diskutovalo tady na Rootu – hledejte např. Certificate Patrol).

Aby tato opatření fungovala, je nezbytné, aby přes HTTPS byla přístupná a šifrovaná celá session s bankou. Selhávají totiž v případě, že uživatel pro přístup do banky používá URL nějakého HTTP serveru a z něj se teprve kliknutím dostává do „zabezpečené zóny“ (příklad: http://www.banka.cz jsou normální HTTP stránky banky, na kterých je klik na „Přihlášení na účet“, který uživatele přivede na HTTPS server secure-praha-312.banka.cz, kde teprve vyplňuje jméno/heslo). Uživatel to druhé delší URL nepoužije, bude přistupovat k účtu přes http://www.banka.cz a MITM si bude mnout ruce…

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.