Když otevřete svůj web v prohlížeči, nevidíte skoro nic z toho, co se ve skutečnosti odehrává. Prohlížeč a server si mezi sebou před vykreslením stránky vymění desítky neviditelných pokynů — mimo jiné takzvané bezpečnostní hlavičky. Jsou to instrukce typu „tuhle stránku nikdy nenačítej bez šifrování” nebo „nedovol, aby si mě někdo schoval do svého rámu a napálil tak návštěvníka”. Vy je jako majitel webu neuvidíte nikdy — ale útočník, který hledá slabá místa, je zkontroluje jako první. A překvapivě často zjistí, že tam prostě nejsou.
Co jsou bezpečnostní hlavičky
Technicky jde o pár řádků v odpovědi serveru, které se posílají spolu s obsahem stránky. Nejsou vidět v layoutu, nemění vzhled webu, návštěvník si jich nikdy nevšimne. Jejich jediný úkol je říct prohlížeči, jak se má chovat, aby byl návštěvník v bezpečí — i kdyby se na webu něco pokazilo nebo se do něj útočník pokusil něco propašovat.
Dobrá zpráva je, že jejich nastavení je většinou otázka pár řádků konfigurace na serveru, ne přestavby webu. Špatná zpráva je, že na velkém množství menších firemních webů chybí úplně — protože je při tvorbě webu prostě nikdo nezmínil.
HSTS: „tenhle web se načte jen šifrovaně, tečka”
Zkratka HSTS (HTTP Strict Transport Security) řekne prohlížeči jednu jednoduchou věc: i kdyby se někdo pokusil na váš web přistoupit nezabezpečeně (přes http:// místo https://), prohlížeč to odmítne a rovnou přepne na šifrované spojení. Bez HSTS existuje krátké okno, kdy může někdo na nezabezpečené veřejné Wi-Fi přesměrovat návštěvníka na podvrženou verzi stránky, aniž by si toho všiml. S HSTS je toto okno zavřené.
Content-Security-Policy: hlídač toho, jaký kód smí web spustit
Content-Security-Policy (CSP) je hlavička, která webu řekne: „spouštěj jen kód a zdroje, které jsem výslovně povolil — nic jiného.” Zní to abstraktně, ale důsledek je velmi konkrétní: pokud se útočníkovi podaří do webu (třeba přes zranitelný plugin nebo formulář) propašovat škodlivý skript, CSP mu ve správně nastavené podobě zabrání ten skript spustit nebo alespoň zabrání odeslat ukradená data na cizí server.
Přesně tímto způsobem se odehrávají takzvané skimmingové útoky na e-shopy — útočník nepotřebuje prolomit platební bránu, stačí mu pár řádků kódu vložených do stránky s platebním formulářem, které tiše kopírují čísla karet zákazníků. Nejznámější případ z reálného světa je útok na British Airways v roce 2018: útočníci ze skupiny označované jako Magecart přidali do platební stránky pouhých 22 řádků škodlivého kódu, který odesílal data zadaná zákazníky na server pod jejich kontrolou. Zasaženo bylo přes 400 tisíc lidí, u části z nich unikla i jména, adresy a bezpečnostní kódy karet. Britský úřad pro ochranu osobních údajů (ICO) firmě původně navrhoval pokutu 183 milionů liber, po zohlednění okolností nakonec vyměřil pokutu 20 milionů liber. Správně nastavená CSP hlavička takový útok neřeší kouzelně sama o sobě, ale výrazně ztěžuje právě tu fázi útoku, kdy má škodlivý kód odeslat ukradená data pryč ze stránky.
X-Frame-Options: ochrana proti podvodnému rámu
Tahle hlavička řeší jinou situaci — takzvaný clickjacking. Útočník vytvoří vlastní stránku a do neviditelného rámu (iframe) do ní schová váš web — třeba přihlašovací formulář nebo tlačítko „potvrdit platbu”. Návštěvník si myslí, že kliká na neškodný prvek podvodníkovy stránky, ve skutečnosti ale kliká na skrytý prvek toho vašeho. X-Frame-Options prohlížeči řekne, že se váš web takhle schovávat do cizích rámů nesmí — a útok tím padá.
Menší hlavičky, které se sčítají
Kromě těchto tří existuje ještě pár dalších, méně nápadných, ale užitečných:
- Referrer-Policy — kontroluje, kolik informací o tom, odkud návštěvník přišel, web prozradí dalším stránkám.
- X-Content-Type-Options — brání prohlížeči „hádat” typ souboru jinak, než server řekl, což se dá zneužít k propašování škodlivého obsahu.
- Permissions-Policy — omezuje, které funkce prohlížeče (kamera, poloha, mikrofon) smí web vůbec požadovat.
Žádná z nich sama o sobě není zázrak. Dohromady ale tvoří několik vrstev obrany, které útočníkovi práci znatelně ztíží — a u řady útoků rozhodují právě tyto vrstvy o tom, jestli se pokus vůbec podaří.
Na co si dát pozor
- Web běží na https, ale adresa http:// se stále dá otevřít bez automatického přesměrování na zabezpečenou verzi — chybí HSTS.
- Web používá spoustu externích skriptů (reklamy, měření, chaty, pluginy) a nikdo neřeší, odkud smí a odkud nesmí načítat kód — typicky chybí CSP.
- Nikdo ve firmě neví, jestli byl web navrhovaný s bezpečností „od základů”, nebo jestli se jen postavil a spustil.
- Poslední bezpečnostní kontrola webu proběhla „nikdy” nebo si na ni nikdo nepamatuje.
Co s tím
Náprava chybějících hlaviček je z technického hlediska jedna z levnějších oprav, jaké na webu můžete udělat — pokud víte, že tam chybí.
- Zjistěte aktuální stav. Existují i veřejné online nástroje, které hlavičky vašeho webu zkontrolují zdarma během pár vteřin.
- Nechte si od vývojáře nebo správce hostingu doplnit chybějící hlavičky. U většiny webů (WordPress, Shoptet, vlastní řešení na běžném hostingu) jde o úpravu konfigurace serveru nebo pár řádků v .htaccess či nginx configu — obvykle záležitost hodin, ne týdnů.
- Otestujte web po nasazení. CSP se dá nastavit příliš přísně a rozbít tím vlastní web (třeba přestanou fungovat vložené mapy nebo platební brána) — proto se vyplatí nasazovat postupně a ověřovat.
- Zopakujte kontrolu po každé větší změně webu — novém pluginu, redesignu, změně hostingu. Hlavičky se dají „ztratit” i omylem při migraci.
Revize WebRevize kontroluje mimo jiné právě přítomnost a nastavení těchto hlaviček — jde o pasivní kontrolu veřejně dostupných informací o webu, bez jakéhokoli zásahu do jeho provozu. Výsledkem je přehledný report, co konkrétně chybí a proč na tom záleží.
Projde váš web technickou kontrolou?
Zjistěte zdarma, jestli váš web netrpí některým z problémů z tohoto článku. Uděláme mu revizi bezpečnosti, rychlosti i viditelnosti a pošleme přehledný report — bez závazků.
Zdroje: Webglobe – Co je HSTS, MDN – Content-Security-Policy, The Register – pokuta British Airways za útok Magecart.

Napsat komentář