Na to se dá použít $_SERVER[‚HTTPS‘] a 301 Moved permanently, a je to.
Jak vynutit přenos po HTTPS pomocí hlavičky
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.
Dále čtěte…
- Zvoní plug-inům hrana? Firefox experimentuje s opt-in mechanismem 13. 4. 2012 9:39
- Firefox a přehled nástrojů pro webové vývojáře 29. 11. 2011 8:52
- Intel chystá rozšíření JavaScriptu pro paralelní programování 21. 9. 2011 11:04
- Boot to Gecko: blíží se FirefoxOS? 3. 8. 2011 0:00
- Novinky Firefoxu 5 pro vývojáře 22. 6. 2011 8:44
Re: Jinak
celé vláknoNe, 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 www.banka.cz. Když se do této banky přihlašujete poprvé, zadáte 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 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 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 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 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: 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 www.banka.cz a MITM si bude mnout ruce…