Modul 4 · 4.2
Vaša webová stránka: https, HSTS a bezpečnostné hlavičky
Modul 4: E-mail, webová stránka a doména · Čas čítania: 11 minút
Cieľ lekcie: Po tejto lekcii dokážete skontrolovať základné zabezpečenie svojej webovej stránky: platný certifikát, presmerovanie na https, HSTS so správnou hodnotou max-age, najdôležitejšie bezpečnostné hlavičky a aktualizáciu svojho CMS.
Kľúčové pojmy: TLS certifikát, https, presmerovanie na https, HSTS, max-age, includeSubDomains, preload, HTTP hlavička, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
Čo sa stane, keď niekto otvorí vašu stránku
Ak klient zadá example.com do adresného riadka, prehliadač si vyžiada stránku z vášho webového servera. Táto komunikácia prebieha cez HTTP. Pri https je okolo nej zabezpečené spojenie: TLS. Na to vaša webová stránka potrebuje TLS certifikát (často sa stále označuje ako SSL certifikát). Certifikát dokazuje, že server naozaj patrí k example.com, a šifrovanie zabezpečuje, že nikto po ceste nemôže komunikáciu čítať ani meniť. To je dôležité na verejnej wifi, kde neviete, kto sieť spravuje (lekcia 5.3).
Pri každej odpovedi posiela server okrem samotnej stránky aj rad hlavičiek (headers): krátkych riadkov s informáciami a pokynmi pre prehliadač. Na obrazovke ich nevidíte, ale do veľkej miery určujú, ako bezpečne sa prehliadač k vašej stránke správa. Časť týchto hlavičiek sú bezpečnostné hlavičky. V tejto lekcii prejdeme štyri vrstvy: certifikát, presmerovanie, HSTS a hlavičky. Potom sa krátko pozrieme na aktualizáciu samotnej webovej stránky.
Vrstva 1: platný certifikát
Certifikát je v poriadku, ak spĺňa tri podmienky:
- nie je po platnosti;
- vydala ho dôveryhodná certifikačná autorita (ktorú prehliadače poznajú, napríklad Let's Encrypt alebo komerčný poskytovateľ);
- platí pre presne ten názov, ktorý návštevník otvára:
example.comajwww.example.com, ak používate oba.
Takmer každý poskytovateľ hostingu dnes zariadi bezplatný certifikát, ktorý sa automaticky obnovuje. Ak niečo nefunguje, zvyčajne je to preto, že doménové meno smeruje na iný server, alebo že CAA záznam blokuje vydavateľa (lekcia 4.3).
Dôležité je vedieť, že zámok nič nehovorí o dôveryhodnosti stránky. Hovorí len to, že spojenie je šifrované a že certifikát patrí k názvu v adresnom riadku. Phishingové stránky na mijnbank-veilig.example majú rovnako tak zámok. Preto sa v lekcii 3.2 naučíte čítať doménu.
Vrstva 2: vždy presmerovať na https
Samotný certifikát nestačí. Kto otvorí http://example.com, napríklad cez starý odkaz alebo len zadaním názvu, musí automaticky prejsť na https verziu. Toto sa nazýva presmerovanie (redirect, zvyčajne so stavovým kódom 301).
Správne poradie je:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (len ak používate www ako hlavnú adresu)
http://www.example.com -> https://www.example.comVšimnite si prvý riadok: z http presmerujte najprv na https na rovnakom názve, až potom prípadne na www. Vďaka tomu prehliadač dostane HSTS pokyn aj pri verzii bez www. Internet.nl presne toto kontroluje.
Častou chybou je dvojité presmerovanie: v paneli hostingu aj v pluginu alebo v .htaccess. To môže spôsobiť nekonečnú slučku ("príliš veľa presmerovaní"). Používajte len jedno miesto.
Vrstva 3: HSTS
Presmerovanie má slabé miesto: úplne prvá požiadavka ešte ide nešifrovane cez http. Útočník v rovnakej sieti môže túto jednu požiadavku zachytiť a udržať návštevníka na falošnej, nešifrovanej verzii. Na to slúži HSTS (HTTP Strict Transport Security, RFC 6797).
S HSTS vaša stránka cez https posiela aj túto hlavičku:
Strict-Transport-Security: max-age=31536000; includeSubDomainsPrehliadač si potom zapamätá: "túto stránku otvárať len cez https, nasledujúcich 31 536 000 sekúnd (jeden rok)". Ak návštevník neskôr zadá http://example.com, prehliadač si sám vytvorí https ešte predtým, než sa čokoľvek prenesie po sieti. Slabá prvá požiadavka tak odpadá.
| Časť | Význam |
|---|---|
max-age= | Ako dlho si to prehliadač zapamätá, v sekundách. Internet.nl počíta minimálne jeden rok (max-age=31536000) ako dostatočné; krátke obdobie nechráni ľudí, ktorí vašu stránku navštevujú len občas. |
includeSubDomains | Platí aj pre všetky subdomény, ako shop.example.com a mail.example.com. |
preload | Žiadate o zaradenie do zoznamu, ktorý je vstavaný v prehliadačoch (hstspreload.org). Vtedy je chránená aj úplne prvá návšteva. Požiadavky: okrem iného max-age minimálne jeden rok, includeSubDomains a všetky subdomény na https. Vyradenie trvá dlho. |
max-age=0 | Zmaže zapamätaný pokyn. |
Tri veci, ktoré musíte vedieť predtým, než zapnete HSTS:
- Najprv musí https fungovať všade. Prehliadač, ktorý si zapamätal HSTS a narazí na chybu certifikátu, návštevníkovi neponúkne tlačidlo na pokračovanie napriek tomu (RFC 6797, odsek 12.1). Ak vám vyprší certifikát alebo nesedí pre
www, vaša stránka je pre týchto návštevníkov nedostupná, kým sa to nevyrieši. includeSubDomainszasiahne všetko pod vašou doménou. Stará subdoména bez certifikátu, napríklad stránka tlačiarne alebo kamery nacamera.example.com, sa potom už nedá otvoriť.- Zavádzajte to postupne. Začnite s krátkym
max-age(napríklad jeden deň), skontrolujte, či všetko funguje, a po krokoch zvyšujte až na jeden rok. Pri každom kroku počkajte celé obdobie.
HSTS hlavičku, ktorá príde cez obyčajné http, prehliadač ignoruje. Uvidíte ju teda len v https odpovedi.
Vrstva 4: bezpečnostné hlavičky
Okrem HSTS existuje niekoľko hlavičiek, ktoré prehliadaču hovoria, čo smie a nesmie robiť s vašimi stránkami. Nemusíte mať všetky dokonalé, ale prvé tri sú jednoduché a bez rizika.
| Hlavička | Proti čomu | Dobrá hodnota |
|---|---|---|
X-Content-Type-Options | Prehliadač si sám háda, čo je daný súbor, čím 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 neviditeľne načíta vašu stránku do rámca a necháva návštevníkov nevedomky klikať na vaše tlačidlá. | frame-ancestors 'self' alebo 'none'; staršia hlavička X-Frame-Options: SAMEORIGIN alebo DENY |
Referrer-Policy | Pri kliknutí na inú stránku prehliadač posiela adresu predchádzajúcej stránky. Môžu v nej byť citlivé informácie, ako vyhľadávaný výraz alebo číslo objednávky. | no-referrer alebo same-origin (prísne), strict-origin-when-cross-origin (bežné, internet.nl tu dáva upozornenie) |
Content-Security-Policy (úplná) | Obmedzuje, z ktorých miest sa smú načítať skripty, štýly a obrázky. Výrazne sťažuje vloženie škodlivých skriptov (XSS). | Individuálne nastavenie pre každú stránku. Vyhýbajte sa unsafe-inline, unsafe-eval a zástupným znakom. |
Úplná Content-Security-Policy je najsilnejšia, ale aj najnáročnejšia: príliš prísne pravidlo môže rozbiť vaše štatistiky, platobné tlačidlo alebo chatovacie okno. S variantom Content-Security-Policy-Report-Only môžete najprv zmerať, čo by sa blokovalo, bez toho, aby ste niečo rozbili. Toto nechajte na svojho webového vývojára, alebo začnite len s frame-ancestors.
Ako si sami pozrieť hlavičky
Otvorte svoju stránku v prehliadači, stlačte F12 (alebo zvoľte "Preskúmať"), prejdite na kartu Sieť (Network), znova načítajte stránku a kliknite na prvú požiadavku. Pod "Hlavičky odpovede" (Response Headers) uvidíte všetko, čo server posiela. Dá sa to zistiť aj cez príkazový riadok:
curl -sI https://example.com/Samotná webová stránka: CMS, pluginy a šablóny
Najlepšie hlavičky nepomôžu, ak je softvér za vašou stránkou zraniteľný. Väčšina napadnutých stránok malých firiem nebola prelomená cez webový server, ale cez zastaraný plugin, šablónu, ktorá sa roky neaktualizuje, alebo slabé administrátorské heslo.
- Zapnite automatické aktualizácie pre svoj CMS (napríklad WordPress, Joomla alebo iný systém) a pre pluginy, kde je to možné.
- Odstráňte pluginy a šablóny, ktoré nepoužívate; vypnutie nestačí, súbory tam stále zostávajú.
- Na administrátorské prihlásenie používajte silné, jedinečné heslo a dvojfaktorové overenie (2FA) (modul 2), a obmedzte počet pokusov o prihlásenie.
- Udržiavajte verziu PHP (alebo iného jazyka) vášho balíka na verzii, ktorá ešte dostáva aktualizácie (lekcia 5.1).
V praxi: takto to vyzerá
V DirectAdmin, paneli, ktorý WebOké používa, si pri svojej doméne najprv zapnite Zabezpečený protokol SSL a potom Vynútiť presmerovanie na https. Na rovnakom mieste je prepínač pre HSTS; zapnite ho až vtedy, keď certifikát funguje pre všetky názvy. U iných poskytovateľov to funguje podobne, alebo si to nastavíte v nastaveniach svojho CMS.
Ak vaša stránka beží na Apache alebo LiteSpeed, hlavičky môžete nastaviť aj v .htaccess:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
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"
</IfModule>Pridajte includeSubDomains až vtedy, keď máte istotu, že každá subdoména má https. Po každej zmene skontrolujte výsledok testom webovej stránky na internet.nl alebo pomocou vývojárskych nástrojov vášho prehliadača.
Zhrnutie
- Zámok znamená: šifrované a správny názov. Neznamená: dôveryhodné.
- Http vždy presmerujte na https, najprv na rovnakom názve, a len na jednom mieste.
- HSTS zabezpečí, že si prehliadač zapamätá, že vaša stránka funguje len cez https; internet.nl počíta
max-ageminimálne jeden rok (31536000) ako dobré. Zapnite to až vtedy, keď https funguje všade, a zavádzajte to postupne. X-Content-Type-Options: nosniff,frame-ancestors(aleboX-Frame-Options) aReferrer-Policysú jednoduché; úplná Content-Security-Policy si vyžaduje individuálne nastavenie.- Aktualizácie vášho CMS, pluginov a šablón sú minimálne rovnako dôležité ako hlavičky.
Kvíz
Úloha
Úloha A4.2: Kontrola https, HSTS a hlavičiek vašej webovej stránky. Zadajte doménové meno svojej webovej stránky (ak žiadne nemáte, použite internet.nl). Program otvorí http:// a https:// vašej domény a skontroluje certifikát, presmerovanie na https, HSTS a bezpečnostné hlavičky. Pri každom bode dostanete zelenú, oranžovú alebo červenú farbu s vysvetlením.
Úloha D4.2: Aktualizácia a upratanie vašej webovej stránky. Prihláste sa do správy svojej webovej stránky, skontrolujte verziu svojho CMS, pluginov a šablón, odstráňte to, čo nepoužívate, a zapnite automatické aktualizácie, kde je to možné. Odškrtnite kontrolný zoznam a odpovedzte na reflexnú otázku.
Úloha D4.2: Aktualizácia a upratanie vašej webovej stránky
Postupujte takto: (1) Prihláste sa do správy svojej webovej stránky (alebo požiadajte svojho tvorcu webu, aby to urobil spolu s vami). (2) Zaznamenajte si verziu svojho CMS a skontrolujte, či sú pripravené aktualizácie. (3) Vytvorte zálohu (lekcia 6.1), nainštalujte aktualizácie CMS, doplnkov a šablón. (4) Odstráňte doplnky a šablóny, ktoré nepoužívate. (5) Zapnite automatické aktualizácie, kde je to možné. (6) Skontrolujte, aké účty správcu existujú, a odstráňte účty ľudí, ktorí už vo firme nepracujú. (7) Zapnite dvojfaktorové overenie pre každý účet správcu.
Vaše zaškrtnutia a poznámky zostávajú iba v tomto prehliadači, nikam ich neposielame. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že ste úlohu splnili.
Ďalšie čítanie
Postupy v článkoch WebOké platia pre prostredie WebOké; u iných poskytovateľov to funguje podobne.
- Aktivácia a obnovenie SSL certifikátu, riešenie problémov
- Povinne presmerovať návštevníkov na https
- Návod na DirectAdmin 6.4: Návštevníkov vždy presmerovať na https
- Návod na DirectAdmin 6.7: Žiadny zámok alebo 'nezabezpečené': riešenie problému mixed content
- Návod na DirectAdmin 15.10: Firewall webových aplikácií (ModSecurity)
- Zabezpečenie wp-login.php vo WordPresse
- Internet.nl, test webovej stránky (nezávislý): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- Zoznam HSTS preload: https://hstspreload.org
- MDN, vysvetlenie hlavičiek (v angličtine): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
