Hlavičky HSTS a zabezpečenia pre vašu webovú stránku
Pri každej stránke posiela váš webový server hlavičky (headers): krátke riadky s pokynmi pre prehliadač. Z časti 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 prečítate v Aktivácia, obnova 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 ešte prebieha nešifrovane. Niekto v rovnakej sieti, napríklad na verejnej wifi, môže túto požiadavku zachytiť. HSTS (HTTP Strict Transport Security) tento problém rieši. Vaša stránka posiela cez https 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č to sám prevedie na https, ešte predtým, než sa čokoľvek odošle cez sieť. Hlavičku HSTS, ktorá príde cez obyčajné http, prehliadač ignoruje.
| Časť | 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, ako shop.vasadomena.nl a mail.vasadomena.nl. |
preload | Žiadate o zaradenie do zoznamu, ktorý je zabudovaný v prehliadačoch (hstspreload.org). Vtedy je chránená 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 | Vymaže zapamätaný pokyn, pri ďalšej návšteve cez https. |
includeSubDomains to platí aj pre každú subdoménu, napríklad starú stránku kamery alebo tlačiarne bez certifikátu. Postupujte preto krok za krokom: začnite s krátkym max-age, napríklad jeden deň (86400), skontrolujte, či všetko funguje, a postupne zvyšujte až na jeden rok.Prepínač HSTS v DirectAdmin
V DirectAdmin prejdite na Domains a kliknite na názov vašej domény. Ak je zapnuté Secure SSL, uvidíte pri HSTS prepínač Enable HTTP Strict Transport Security. Potom kliknite na Save na uloženie. Ako to prebieha krok za krokom, si prečítate v Vždy presmerovať návštevníkov na https.
Ak chcete zistiť, aký max-age vaša stránka posiela, pozrite sa do nástrojov pre vývojárov vo vašom prehliadači alebo do testu internet.nl (pozrite nižšie). Nastavte HSTS na jednom mieste: v DirectAdmin alebo v .htaccess, nie na oboch. Ak prehliadač dostane dve hlavičky HSTS, použije iba prvú.
Ostatné bezpečnostné hlavičky
| Hlavička | Proti čomu | Hodnota, ktorou začať |
|---|---|---|
X-Content-Type-Options | Prehliadač sám háda, čím daný súbor je, kvôli čomu môže byť nahraný "obrázok" spustený 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 vo 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 posiela prehliadač adresu predchádzajúcej stránky, niekedy aj s vyhľadávacím výrazom alebo číslom objednávky. | strict-origin-when-cross-origin, alebo prísnejšie same-origin alebo no-referrer. Internet.nl považuje za vyhovujúce iba prísne hodnoty. |
Permissions-Policy | Určuje, ktoré funkcie prehliadača smie vaša stránka a vložené frames používať, ako kamera, mikrofón a poloha. | camera=(), microphone=(), geolocation=() vypne tieto tri. Ak vaša stránka jednu z týchto funkcií používa, vynechajte ju. |
Content-Security-Policy (úplná) | Obmedzuje, odkiaľ smú skripty, štýly a obrázky načítavať. Vďaka tomu je vloženie škodlivých skriptov (XSS) oveľa ťažšie. | Na mieru pre každú stránku. 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 je prepínač HSTS v DirectAdmin vypnutý: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Pridajte includeSubDomains až vtedy, keď si budete istí, že každá subdoména má https. Ak používate WordPress, môžete hlavičky nastaviť aj pomocou pluginu. Vyberte si overený plugin, ktorý sa stále aktualizuje, a nastavte každú hlavičku na jednom mieste: v pluginu alebo v .htaccess.
Content-Security-Policy-Report-Only. Tá nič neblokuje, ale v konzole prehliadača zobrazí, čo by bolo zablokované. Pri pochybnostiach to nechajte na vášho webového vývojára, alebo začnite iba s frame-ancestors.Testovanie
- Internet.nl: zadajte svoju doménu do testu stránky na internet.nl.
- Váš prehliadač: otvorte svoju stránku, stlačte F12 (alebo zvoľte Preskúmať prvok), prejdite na záložku Sieť (Network), znova načítajte stránku a kliknite na prvú požiadavku. Pod Response Headers uvidíte všetko, čo váš server posiela.
- Príkazový riadok:
curl -sI https://vasadomena.nl/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 aktualizovaný váš CMS, pluginy a šablóny. Pozrite si Zabezpečenie wp-login.php vo WordPress.
Ďalšie čítanie
- MDN: Strict-Transport-Security (po anglicky)
- MDN: Content-Security-Policy (po anglicky)
- MDN: Permissions-Policy (po anglicky)
- Zoznam HSTS-preload (po anglicky)
