Chýba Strict-Transport-Security
Čo to je
Vaše stránky neposielajú hlavičku Strict-Transport-Security (HSTS). Táto hlavička povie prehliadaču „na tejto stránke už nikdy nepoužívaj HTTP, vždy rovno HTTPS“.
Prečo je to problém
Aj keď máte funkčné HTTPS aj HTTP presmerovanie, prvá návšteva má slabé miesto. Používateľ napíše example.sk — prehliadač začne pokusom o HTTP. Ak je v tej chvíli medzi vami a serverom útočník (verejná Wi-Fi, kompromitovaný router), môže:
- Zachytiť cookies, ktoré prehliadač pošle s HTTP požiadavkou.
- Vykonať SSL strip — držať používateľa na HTTP a sám komunikovať so serverom cez HTTPS.
S HSTS prehliadač vie vopred, že na example.sk sa nesmie ísť cez HTTP, a útok sa nepodarí.
Ako to opraviť
Krok 1 — uistite sa, že HTTPS je stabilné
HSTS si prehliadač „zapamätá“ na dlhšie obdobie. Keď potom HTTPS pokazíte (expirovaný certifikát, omylom vypnuté SSL), váš web bude pre vracajúcich sa návštevníkov nedostupný — prehliadač odmietne aj fallback na HTTP.
Pred zapnutím HSTS si overte:
- Automatická obnova certifikátu funguje (Let’s Encrypt, certbot, alerting).
- Všetky subdomény, ktoré chcete pokryť, majú platný certifikát.
Krok 2 — nastaviť krátku hodnotu na test
Strict-Transport-Security: max-age=3005 minút. Keď sa niečo pokazí, do 5 minút to odznie. Sledujte uptime a spustite niekoľko testov.
Krok 3 — nasadiť produkčnú hodnotu
Strict-Transport-Security: max-age=15552000; includeSubDomainsmax-age=15552000= 6 mesiacov.includeSubDomains= platí aj pre všetky subdomény. Pozor: ak máte subdoménu bez HTTPS (legacy admin, intranet), táto direktíva ju pokazí.
Krok 4 (voliteľný) — preload
Ak chcete byť vo vstavanom zozname prehliadačov (Chrome, Firefox, Safari) a mať HSTS aj pre úplne prvú návštevu z čistého prehliadača:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preloadPotom doménu zaregistrujte na hstspreload.org.Tento krok je ťažko reverzibilný — vyradenie zo zoznamu trvá týždne až mesiace.
Konkrétna konfigurácia
nginx:
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;Apache:
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"Cloudflare: SSL/TLS → Edge Certificates → HTTP Strict Transport Security — UI checkbox.