Hlavičky HSTS a bezpečnostné hlavičky pre váš web
Pri každej stránke posiela váš webový server hlavičky (headers): krátke riadky s pokynmi pre prehliadač. Čiastočne určujú, ako bezpečne prehliadač zaobchádza s vašou stránkou. Tu sa dozviete, čo je HSTS, aké ďalšie bezpečnostné hlavičky existujú a ako ich nastaviť a otestovať.
Najprv musí mať vaša stránka funkčný certifikát a presmerovávať návštevníkov na https. O tom si môžete prečítať v článkoch Aktivácia, obnovenie a riešenie problémov s SSL certifikátom a Povinné presmerovanie návštevníkov na https.
Čo robí HSTS?
Presmerovanie na https má jeden slabý moment: prvá požiadavka cez http je stále nešifrovaná. Niekto v rovnakej sieti, napríklad na verejnej wifi, môže túto požiadavku zachytiť. HSTS (HTTP Strict Transport Security) toto rieši. Vaša stránka cez https posiela túto hlavičku:
Strict-Transport-Security: max-age=31536000
Prehliadač si potom zapamätá, že vašu stránku smie otvárať iba cez https. Ak návštevník neskôr zadá http://, prehliadač z toho sám urobí https ešte predtým, než čokoľvek prejde cez sieť. Hlavičku HSTS, ktorá prichádza cez bežné http, prehliadač ignoruje.
| Prvok | Význam |
|---|---|
max-age | Ako dlho si to prehliadač zapamätá, v sekundách. Test internet.nl považuje za dostatočný aspoň jeden rok (31536000). |
includeSubDomains | Platí aj pre všetky subdomény, napríklad shop.vasadomena.sk a mail.vasadomena.sk. |
preload | Žiadate o zaradenie do zoznamu, ktorý je zabudovaný v prehliadačoch (hstspreload.org). Vtedy je chránená dokonca aj úplne prvá návšteva. Na to je okrem iného potrebný jeden rok, includeSubDomains a https na všetkých subdoménach. Odstránenie zo zoznamu trvá dlho. |
max-age=0 | Pri nasledujúcej návšteve cez https vymaže zapamätaný pokyn. |
includeSubDomains to platí aj pre každú subdoménu, napríklad pre starú stránku kamery alebo tlačiarne bez certifikátu. Postupujte preto krok za krokom: začnite s krátkou hodnotou max-age, napríklad jeden deň (86400), skontrolujte, či všetko funguje, a postupne ju zvyšujte až na jeden rok.HSTS vo WebOké
Na väčšine našich serverov webový server štandardne posiela HSTS pre každú webovú stránku, ktorá sa otvára cez https: Strict-Transport-Security: max-age=31536000. To je jeden rok, bez includeSubDomains a bez preload. Na to nemusíte nič robiť. Na niekoľkých serveroch to nie je zapnuté štandardne; tam si to zapnete sami. Či vaša stránka už posiela HSTS a s akou hodnotou max-age, zistíte vo vývojárskych nástrojoch vášho prehliadača alebo v teste internet.nl (pozrite nižšie).
Prepínač HSTS v DirectAdmin
V DirectAdmin prejdite na Domény a kliknite na názov svojej domény. Ak je zapnuté Zabezpečené SSL pripojenie, uvidíte pri HSTS prepínač Zapnúť HTTP Strict Transport Security. Potom kliknite na Upraviť, aby ste zmeny uložili. Ako to prebieha krok za krokom, si prečítajte v článku Vždy presmerovať návštevníkov na https.
Ak vaša stránka už HSTS posiela, prepínač nepotrebujete. Zapnite ho iba vtedy, keď vaša stránka HSTS ešte neposiela. Nastavte HSTS len na jednom mieste: buď v DirectAdmin, alebo v .htaccess, nie na oboch. Ak prehliadač dostane dve hlavičky HSTS, použije iba prvú.
Ďalšie bezpečnostné hlavičky
| Hlavička | Proti čomu | Hodnota na začiatok |
|---|---|---|
X-Content-Type-Options | Prehliadač sám háda, o aký súbor ide, čím sa nahratý „obrázok“ môže spustiť ako skript. | nosniff (jediná platná hodnota) |
Content-Security-Policy: frame-ancestors alebo X-Frame-Options | Clickjacking: iná stránka načíta vašu stránku neviditeľne v rámci (frame), takže návštevníci nepozorovane klikajú na vaše tlačidlá. | frame-ancestors 'self', alebo staršia hlavička X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Pri kliknutí na inú stránku prehliadač posiela adresu predchádzajúcej stránky, niekedy aj s vyhľadávaným výrazom alebo číslom objednávky. | strict-origin-when-cross-origin, alebo prísnejšie same-origin či no-referrer. Internet.nl považuje za správne iba prísne hodnoty. |
Permissions-Policy | Určuje, ktoré funkcie prehliadača smie vaša stránka a vložené rámce používať, napríklad kameru, mikrofón a polohu. | camera=(), microphone=(), geolocation=() vypne tieto tri. Ak vaša stránka niektorú z týchto funkcií používa, vynechajte ju. |
Content-Security-Policy (úplná) | Obmedzuje, z ktorých miest sa smú načítavať skripty, štýly a obrázky. Vďaka tomu je vloženie škodlivých skriptov (XSS) oveľa ťažšie. | Prispôsobuje sa pre každú stránku osobitne. Vyhýbajte sa unsafe-inline, unsafe-eval a zástupným znakom (wildcards). |
Nastavenie v .htaccess
Vložte tieto riadky na začiatok súboru .htaccess v priečinku public_html vašej domény. Najprv si vytvorte kópiu súboru.
<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff" Header always set Content-Security-Policy "frame-ancestors 'self'" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" # Iba ak vaša stránka ešte neposiela HSTS (pozrite vyššie): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Pridajte includeSubDomains až vtedy, keď si ste istí, že každá subdoména má https. Ak používate WordPress, hlavičky môžete nastaviť aj pomocou pluginu. Vyberte si známy plugin, ktorý sa stále aktualizuje, a každú hlavičku nastavte iba na jednom mieste: buď v plugine, alebo v .htaccess.
Content-Security-Policy-Report-Only. Tá nič neblokuje, ale v konzole prehliadača zobrazí, čo by sa zablokovalo. V prípade pochybností to prenechajte svojmu webovému vývojárovi, alebo začnite iba s frame-ancestors.Testovanie
- Internet.nl: zadajte svoju doménu do testu webovej stránky na internet.nl.
- Váš prehliadač: otvorte svoju stránku, stlačte F12 (alebo zvoľte Preskúmať), prejdite na kartu Sieť, znova načítajte stránku a kliknite na prvú požiadavku. Pod Hlavičky odpovede (Response Headers) uvidíte všetko, čo váš server posiela.
- Príkazový riadok:
curl -sI https://vasadomena.sk/zobrazí hlavičky.
Po každej zmene skontrolujte, či vaša stránka, formuláre a platobná stránka ešte fungujú. Okrem toho udržiavajte svoj CMS, pluginy a šablóny aktualizované. Pozrite si Zabezpečenie wp-login.php vo WordPress.
Ďalšie čítanie
- MDN: Strict-Transport-Security (v angličtine)
- MDN: Content-Security-Policy (v angličtine)
- MDN: Permissions-Policy (v angličtine)
- Zoznam HSTS preload (v angličtine)
