Modul 4 · 4.2
Vaše webová stránka: https, HSTS a bezpečnostní hlavičky
Modul 4: E-mail, web a doména · Doba čtení: 11 minut
Cíl lekce: Po této lekci dokážete zkontrolovat základní zabezpečení Vaší webové stránky: platný certifikát, přesměrování na https, HSTS se správným max-age, nejdůležitější bezpečnostní hlavičky a aktualizaci Vašeho CMS.
Klíčové pojmy: TLS certifikát, https, přesměrování na https, HSTS, max-age, includeSubDomains, preload, HTTP hlavička, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
Co se stane, když někdo otevře Vaši stránku
Když zákazník zadá example.com do adresního řádku, prohlížeč si vyžádá stránku z Vašeho webového serveru. Tato komunikace probíhá přes HTTP. U https je kolem toho zašifrované spojení: TLS. K tomu potřebuje Vaše webová stránka TLS certifikát (často se mu stále říká SSL certifikát). Certifikát dokazuje, že server skutečně patří k example.com, a šifrování zajišťuje, že nikdo cestou nemůže číst obsah ani nic měnit. To je důležité na veřejné wifi, kde nevíte, kdo síť spravuje (lekce 5.3).
U každé odpovědi posílá server kromě samotné stránky také řadu hlaviček: krátké řádky s informacemi a pokyny pro prohlížeč. Na obrazovce je nevidíte, ale z velké části určují, jak bezpečně prohlížeč s Vaší stránkou zachází. Část z nich jsou bezpečnostní hlavičky. V této lekci projdeme čtyři vrstvy: certifikát, přesměrování, HSTS a hlavičky. Poté se krátce podíváme na aktualizaci samotné webové stránky.
Vrstva 1: platný certifikát
Certifikát je v pořádku, pokud splňuje tři podmínky:
- nevypršela jeho platnost;
- byl vydán důvěryhodnou certifikační autoritou (kterou prohlížeče znají, jako Let's Encrypt nebo komerční poskytovatel);
- platí přesně pro název, který návštěvník otevírá:
example.comiwww.example.com, pokud používáte oba.
Téměř každý poskytovatel hostingu dnes zajišťuje bezplatný certifikát, který se automaticky prodlužuje. Pokud se něco pokazí, je to většinou proto, že doménové jméno ukazuje na jiný server, nebo protože záznam CAA blokuje vydavatele (lekce 4.3).
Důležité je vědět: zámek v prohlížeči nic neříká o důvěryhodnosti stránky. Říká pouze to, že spojení je zašifrované a že certifikát patří k názvu v adresním řádku. Phishingové stránky na mijnbank-veilig.example mají stejně dobře zámek. Proto se v lekci 3.2 naučíte číst doménu.
Vrstva 2: vždy přesměrovat na https
Samotný certifikát nestačí. Kdo otevře http://example.com, například přes starý odkaz nebo pouhým zadáním názvu, musí být automaticky přesměrován na https verzi. Tomu se říká přesměrování (redirect, obvykle se stavovým kódem 301).
Přehledné pořadí je:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (pouze pokud používáte www jako hlavní adresu)
http://www.example.com -> https://www.example.comVšimněte si prvního řádku: z http přesměrujte nejprve na https na stejném názvu, až poté případně na www. Prohlížeč tak může přijmout i HSTS pokyn pro holý název. Internet.nl kontroluje přesně toto.
Častou chybou je dvojité přesměrování: v hostingovém panelu i v pluginu nebo v .htaccess. To může vytvořit nekonečnou smyčku ("příliš mnoho přesměrování"). Používejte jedno místo.
Vrstva 3: HSTS
Přesměrování má slabý okamžik: úplně první požadavek jde ještě nezašifrovaně přes http. Útočník ve stejné síti může tento jeden požadavek zachytit a návštěvníka udržet na padělané, nezašifrované verzi. Právě k tomu slouží HSTS (HTTP Strict Transport Security, RFC 6797).
S HSTS Vaše stránka přes https posílá hlavičku:
Strict-Transport-Security: max-age=31536000; includeSubDomainsProhlížeč si pak zapamatuje: "tuto stránku otevírat pouze přes https, následujících 31 536 000 sekund (jeden rok)". Pokud návštěvník později zadá http://example.com, prohlížeč z toho sám udělá https, ještě předtím, než cokoliv projde sítí. Slabý první požadavek tak odpadá.
| Součást | Význam |
|---|---|
max-age= | Jak dlouho si to prohlížeč pamatuje, v sekundách. Internet.nl považuje minimálně jeden rok (max-age=31536000) za dostatečné; krátká doba nechrání lidi, kteří Vaši stránku navštěvují jen občas. |
includeSubDomains | Platí také pro všechny subdomény, jako shop.example.com a mail.example.com. |
preload | Žádáte o zařazení do seznamu, který je zabudovaný v prohlížečích (hstspreload.org). Pak je chráněna i úplně první návštěva. Požadavky zahrnují mimo jiné max-age alespoň jeden rok, includeSubDomains a všechny subdomény na https. Vyřazení ze seznamu trvá dlouho. |
max-age=0 | Smaže zapamatovaný pokyn. |
Tři věci, které byste měli vědět, než zapnete HSTS:
- Nejprve musí https fungovat všude. Prohlížeč, který si zapamatoval HSTS a narazí na chybu certifikátu, návštěvníkovi nenabídne tlačítko pro pokračování i přesto (RFC 6797, odstavec 12.1). Pokud Vám vyprší certifikát nebo nesedí pro
www, je Vaše stránka pro tyto návštěvníky nedostupná, dokud se problém nevyřeší. includeSubDomainszasáhne vše pod Vaší doménou. Stará subdoména bez certifikátu, například stránka tiskárny nebo kamery nacamera.example.com, pak už nepůjde otevřít.- Budujte to postupně. Začněte s krátkým
max-age(například jeden den), zkontrolujte, zda vše funguje, a postupně zvyšujte až na jeden rok. U každého kroku vyčkejte celou danou dobu.
Hlavičku HSTS, která přijde přes obyčejné http, prohlížeč ignoruje. Uvidíte ji tedy pouze v https odpovědi.
Vrstva 4: bezpečnostní hlavičky
Kromě HSTS existuje několik hlaviček, které prohlížeči říkají, co smí a co nesmí dělat s Vašimi stránkami. Nemusíte mít dokonale vyřešené všechny, ale první tři jsou jednoduché a bez rizika.
| Hlavička | Proti čemu | Dobrá hodnota |
|---|---|---|
X-Content-Type-Options | Prohlížeč sám hádá, o jaký typ souboru jde, takže nahraný "obrázek" může být spuštěn jako skript. | nosniff (jediná platná hodnota) |
Content-Security-Policy: frame-ancestors ... nebo X-Frame-Options | Clickjacking: jiná stránka neviditelně načte Vaši stránku do rámce a nechá návštěvníky nevědomky klikat na Vaše tlačítka. | frame-ancestors 'self' nebo 'none'; starší hlavička X-Frame-Options: SAMEORIGIN nebo DENY |
Referrer-Policy | Při kliknutí na jinou stránku posílá prohlížeč adresu předchozí stránky. Může v ní být citlivá informace, například hledaný výraz nebo číslo objednávky. | no-referrer nebo same-origin (přísné), strict-origin-when-cross-origin (běžné, internet.nl zde zobrazí upozornění) |
Content-Security-Policy (úplná) | Omezuje, odkud smí stránka načítat skripty, styly a obrázky. Výrazně ztěžuje vložení škodlivých skriptů (XSS). | Řešení na míru podle stránky. Vyhněte se unsafe-inline, unsafe-eval a zástupným znakům. |
Úplná Content-Security-Policy je nejsilnější, ale také nejobtížnější: příliš přísné pravidlo může rozbít Vaši statistiku, platební tlačítko nebo chatové okno. S variantou Content-Security-Policy-Report-Only můžete nejprve změřit, co by bylo zablokováno, aniž byste cokoliv rozbili. Nechte to na svém webovém vývojáři, nebo začněte pouze s frame-ancestors.
Jak si hlavičky sami prohlédnout
Otevřete Vaši stránku v prohlížeči, stiskněte F12 (nebo zvolte "Prozkoumat"), přejděte na záložku Síť, stránku znovu načtěte a klikněte na první požadavek. Pod "Hlavičky odpovědi" (Response Headers) uvidíte vše, co server posílá. Lze to zjistit i přes příkazový řádek:
curl -sI https://example.com/Samotná webová stránka: CMS, pluginy a šablony
Nejlepší hlavičky nepomohou, pokud je software za Vaší stránkou zranitelný. Většina napadených stránek malých firem nebyla prolomena přes webový server, ale přes zastaralý plugin, šablonu, která se už léta neaktualizuje, nebo slabé heslo administrátora.
- Zapněte automatické aktualizace pro Váš CMS (například WordPress, Joomla nebo jiný systém) a pro pluginy, kde je to možné.
- Odstraňte pluginy a šablony, které nepoužíváte; vypnutí nestačí, soubory tam stále zůstávají.
- Pro administrátorské přihlášení používejte silné, jedinečné heslo a dvoufázové ověření (modul 2) a omezte počet pokusů o přihlášení.
- Udržujte verzi PHP (nebo jiného jazyka) Vašeho balíčku na verzi, která ještě dostává aktualizace (lekce 5.1).
V praxi: takto to vypadá
V DirectAdmin, panelu, který WebOké používá, nejprve u Vaší domény zapněte Bezpečný SSL a poté Vynutit SSL s přesměrováním na https. Na stejném místě je přepínač pro HSTS; zapněte jej až ve chvíli, kdy certifikát funguje pro všechny názvy. U jiných poskytovatelů to funguje podobně, nebo si to nastavíte v nastavení svého CMS.
Pokud Vaše stránka běží na Apache nebo LiteSpeed, můžete hlavičky nastavit také 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>Přidejte includeSubDomains až ve chvíli, kdy máte jistotu, že každá subdoména má https. Po každé změně zkontrolujte výsledek pomocí testu webových stránek na internet.nl nebo pomocí vývojářských nástrojů prohlížeče.
Shrnutí
- Zámek znamená: zašifrováno a správný název. Neznamená: důvěryhodné.
- Http vždy přesměrujte na https, nejprve na stejném názvu, a z jednoho místa.
- HSTS nechá prohlížeč zapamatovat, že Vaše stránka jde pouze přes https; internet.nl považuje
max-agealespoň jeden rok (31536000) za dobré. Zapněte to až ve chvíli, kdy https funguje všude, a budujte to postupně. X-Content-Type-Options: nosniff,frame-ancestors(neboX-Frame-Options) aReferrer-Policyjsou jednoduché; úplná Content-Security-Policy je řešení na míru.- Aktualizace Vašeho CMS, pluginů a šablon jsou přinejmenším stejně důležité jako hlavičky.
Kvíz
Úkol
Úkol A4.2: Kontrola https, HSTS a hlaviček Vaší webové stránky. Zadejte doménové jméno Vaší webové stránky (pokud žádné nemáte, použijte internet.nl). Program otevře http:// a https:// Vaší domény a zkontroluje certifikát, přesměrování na https, HSTS a bezpečnostní hlavičky. U každého bodu dostanete zelenou, oranžovou nebo červenou s vysvětlením.
Úkol D4.2: Aktualizace a úklid Vašeho webu. Přihlaste se do správy Vaší webové stránky, zkontrolujte verzi Vašeho CMS, pluginů a šablon, odstraňte to, co nepoužíváte, a zapněte automatické aktualizace, kde je to možné. Odškrtněte checklist a odpovězte na reflexní otázku.
Úkol D4.2: Aktualizace a úklid Vašeho webu
Postupujte takto: (1) Přihlaste se do správy svého webu (nebo požádejte svého webového vývojáře, aby to udělal společně s Vámi). (2) Poznamenejte si verzi svého CMS a zkontrolujte, zda jsou k dispozici aktualizace. (3) Vytvořte zálohu (lekce 6.1), nainstalujte aktualizace CMS, pluginů a šablon. (4) Odstraňte pluginy a šablony, které nepoužíváte. (5) Zapněte automatické aktualizace, kde je to možné. (6) Zkontrolujte, jaké správcovské účty existují, a odstraňte účty lidí, kteří už u Vás nepracují. (7) Zapněte dvoufázové ověření pro každý správcovský účet.
Vaše zaškrtnutí a poznámky zůstávají pouze v tomto prohlížeči; nikam je neposíláme. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol splnili.
Doporučená literatura
Kroky v článcích WebOké platí pro prostředí WebOké; u jiných poskytovatelů to funguje podobně.
- Aktivace, obnova a řešení problémů s SSL certifikátem
- Povinné přesměrování návštěvníků na https
- Příručka k DirectAdmin 6.4: Návštěvníky vždy přesměrovat na https
- Příručka k DirectAdmin 6.7: Žádný zámek nebo 'není zabezpečeno': řešení smíšeného obsahu
- Příručka k DirectAdmin 15.10: Webový aplikační firewall
- Zabezpečení wp-login.php ve WordPressu
- Internet.nl, test webových stránek (nezávislý): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- Seznam HSTS preload: https://hstspreload.org
- MDN, vysvětlení hlaviček (anglicky): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
