HTTPS a bezpečnost webu
Zámeček v adresním řádku dnes nikoho neohromí, jeho absence ale zabije důvěru během jedné sekundy. Bezpečnost webu malé firmy přitom stojí na pěti věcech, které se dají vyřešit za jedno odpoledne a pak už se jen hlídají.
Certifikát stojí nula korun, ale musí se obnovovat sám
Let's Encrypt vydává certifikát zdarma s platností devadesát dnů. Na Vercelu, Netlify nebo Cloudflare se obnovuje automaticky a nikdo si toho nevšimne. Na klasickém českém hostingu jako Wedos nebo Forpsi je to jedno zaškrtnutí v administraci. Placený certifikát za osm set až tři tisíce korun ročně dává smysl jen tehdy, když protistrana vysloveně chce ověřenou organizaci.
Prohlížeč od roku 2019 nerozlišuje mezi levným a drahým certifikátem vizuálně. Zámeček vypadá stejně. Nejčastější chyba není typ certifikátu, ale to, že běží jen na jedné variantě domény. Certifikát musí pokrývat verzi s www i bez www a z jedné z nich musí vést trvalé přesměrování 301 na tu druhou.
Přesměrování z http na https patří na server, ne do meta tagu v hlavičce. Meta refresh je pomalý a útočník ho stihne obejít. Výsledek si ověřte na SSL Labs, cílem je hodnocení A. Pokud vám test vrátí B, obvykle za to může povolený starý protokol TLS 1.0 nebo chybějící mezilehlý certifikát.
Smíšený obsah: zámek zmizí kvůli jednomu starému obrázku
Smíšený obsah znamená, že se stránka načte přes https, ale některé zdroje na ní visí přes http. Prohlížeč aktivní zdroje, tedy skripty a rámy, rovnou zablokuje. U obrázků je mírnější, jen shodí zámeček a v konzoli vypíše varování. Návštěvník uvidí web bez fotek nebo s rozbitým rozvržením a odejde.
Nejčastěji se to stane po migraci starého webu, kdy v databázi zůstanou absolutní adresy z doby, kdy web běžel na http. Najdete je v konzoli prohlížeče pod klávesou F12 v záložce Console. Ve WordPressu je opraví jediný příkaz WP-CLI search-replace, který projede celou databázi včetně serializovaných polí.
Hlavička Content-Security-Policy s direktivou upgrade-insecure-requests funguje jako záchranná brzda a přepíše http na https za běhu. Není to ale oprava, jen krytí. Pokud zdroj na https vůbec neexistuje, obrázek se stejně nenačte. Databázi projděte pořádně, zabere to hodinu a máte klid na roky.
- absolutní odkazy na obrázky v článcích z let 2014 až 2018
- vložené mapy a videa se starým embed kódem přes http
- fonty a ikony tažené z cizí domény bez šifrování
- měřicí skripty z dávno zrušených nástrojů
- odkazy na PDF ceníky uložené na starém hostingu
- šablona s natvrdo zadanou adresou v hlavičce
Pět hlaviček, které nasadím za dvacet minut
Bezpečnostní hlavičky se posílají spolu s odpovědí serveru a prohlížeči říkají, co smí a co ne. Na statickém webu je to pár řádků v konfiguraci, na WordPressu se přidávají do souboru htaccess nebo přes plugin. Nasazení nemá vliv na vzhled ani na rychlost, jen zavírá dveře, které nikdo nepotřebuje mít otevřené.
Nejsilnější je Content-Security-Policy, protože určuje, odkud se smí načítat skripty. Zároveň dá nejvíc práce. Doporučuji ji nasadit nejdřív v režimu Report-Only, čtrnáct dní sbírat hlášení a teprve pak zapnout ostrou verzi. U statického webu je to hodina, u WordPressu s dvaceti pluginy klidně půl dne.
Výsledek zdarma ověříte na securityheaders.com. Z hodnocení F na A se u statického firemního webu dostanu během jednoho odpoledne. U e-shopu s měřicími skripty od Googlu, Sklik a Facebooku počítejte spíš s hodnocením B, protože CSP musí povolit víc cizích domén. To je pořád násobně lepší stav, než mít hlavičky vypnuté úplně.
- Strict-Transport-Security s hodnotou max-age 31536000 a includeSubDomains
- X-Content-Type-Options s hodnotou nosniff
- Referrer-Policy s hodnotou strict-origin-when-cross-origin
- Permissions-Policy, která vypne kameru, mikrofon a geolokaci
- Content-Security-Policy s direktivou frame-ancestors self
- Cross-Origin-Opener-Policy s hodnotou same-origin
Aktualizace jsou nudná práce, která zabrání devíti útokům z deseti
Drtivá většina napadených webů nepadne kvůli chytrému útoku, ale kvůli zranitelnosti v pluginu, na kterou existovala záplata už několik měsíců. Roboti projíždějí internet a zkoušejí známé díry na milionech adres. Váš web pro ně není cíl, je to jen jedna položka v seznamu, který někdo pustil přes noc.
Rutina, která stačí: jednou měsíčně půl hodiny. Záloha, aktualizace jádra, aktualizace pluginů, kontrola verze PHP, smazání toho, co nepoužíváte. Verze PHP 7.4 nedostává bezpečnostní záplaty od konce roku 2022, přesto na ní pořád běží spousta českých webů. Přechod na osmičku bývá otázkou jednoho přepnutí v administraci hostingu.
K tomu tři drobnosti, které nic nestojí. Vypněte editor souborů v administraci, omezte počet pokusů o přihlášení a zapněte dvoufázové ověření. Statický web nemá databázi ani administraci, takže tyhle starosti odpadají úplně. Proto firemní prezentace stavím staticky, pokud klient nepotřebuje denně přidávat obsah.
Co se malé firmě reálně stane, když to zanedbá
Nikdo nejde cíleně po truhláři z Olomouce ani po penzionu na Šumavě. Jde po nezáplatovaném pluginu. Typický scénář vypadá tak, že se do patičky přidají odkazy na sázkové a lékárnické weby, majitel si toho nevšimne, protože se zobrazují jen robotům, a za tři týdny pozice spadnou o dvacet míst.
Druhý běžný scénář je formulář bez ochrany. Za noc přijde čtyři sta spamových zpráv, doména se dostane na blacklist a poptávky od skutečných zákazníků skončí ve spamu. Jeden penzion tak přišel o rezervace na celý červenec a zjistil to až v srpnu z telefonátu naštvaného hosta.
Nejdražší varianta je phishing rozesílaný z firemní domény. Zákazníkům chodí falešné faktury, banka volá, důvěra je pryč. Obnova takového webu zabere dva dny práce a to je jen technická část. Vysvětlování zákazníkům trvá měsíce a nikdo vám ho nezaplatí. Prevence za tři tisíce korun je proti tomu levná.
- neautorizované odkazy v patičce a uvnitř starších článků
- přesměrování mobilních návštěvníků z vyhledávače na cizí stránku
- rozesílání spamu z firemní domény a blacklist u Seznamu i Gmailu
- varování Google Safe Browsing přímo ve výsledcích vyhledávání
- ztráta pozic, které se sbíraly rok, během tří týdnů
- data z formulářů v cizích rukou a povinnost hlásit incident
Kolik zabezpečení webu reálně stojí
Bezpečnost není jedna položka na faktuře, je to součet drobností. Certifikát je zdarma, hlavičky jsou jednorázová práce, aktualizace jsou měsíční rutina. Pokud web běží staticky a bez administrace, celý balík se vejde do devíti set devadesáti korun měsíčně za provoz. U WordPressu s pluginy počítejte s péčí za dva tisíce devět set devadesát.
Cena za obnovu napadeného webu je nepříjemně proměnlivá. Pokud existuje čistá záloha stará tři dny, jde to za osm tisíc. Pokud je poslední záloha z loňska a mezitím přibylo dvě stě položek v katalogu, blížíte se dvaceti pěti tisícům a stejně o něco přijdete.
Rozumný postup pro firmu s webem starším pěti let: nechte si udělat kontrolu za dva tisíce devět set, opravte smíšený obsah a hlavičky a rozhodněte se, jestli se starý web ještě vyplatí držet. Nový statický web od devatenácti tisíc devíti set devadesáti korun s dodáním do sedmi dnů bývá levnější než rok záplatování.
| Položka | Cena | Poznámka |
|---|---|---|
| Certifikát Let's Encrypt | 0 Kč | automatická obnova každých 90 dní |
| Hlavičky a oprava smíšeného obsahu | od 2 900 Kč | jednorázově, včetně testu a reportu |
| Měsíční Provoz | 990 Kč | hosting, doména, certifikát, zálohy |
| Měsíční Péče | 2 990 Kč | aktualizace, monitoring, drobné úpravy |
| Obnova napadeného webu | 8 000 až 25 000 Kč | podle rozsahu a stáří záloh |
| Nový statický web | od 19 990 Kč | dodání do 7 dní, bez administrace |
Časté otázky
Stačí mi certifikát zdarma, nebo mám koupit placený?
Pro naprostou většinu firemních webů a e-shopů stačí Let's Encrypt. Šifrování je technicky totožné, liší se jen způsob ověření žadatele. Placený certifikát s ověřením organizace řešte, pokud pracujete s bankou, pojišťovnou nebo veřejnou zakázkou, kde to někdo výslovně požaduje. Návštěvník rozdíl v prohlížeči nepozná, protože zelený pruh zmizel už v roce 2019.
Potřebuji https, i když na webu nemám žádný formulář?
Ano. Chrome označuje stránky bez šifrování jako nezabezpečené přímo v adresním řádku, vyhledávače je řadí hůř a bez https nefunguje polovina moderních funkcí prohlížeče. Navíc může kdokoli na cestě do vaší stránky vložit reklamu nebo cizí skript. Certifikát nic nestojí, takže argument o zbytečné komplikaci dnes neobstojí.
Jak poznám, že je můj web napadený?
Zadejte do vyhledávače dotaz site a vaši doménu a projděte, jaké stránky o vás ví. Cizí názvy s léky nebo kasiny jsou jasný signál. Dál sledujte v Search Console sekci s bezpečnostními problémy a zkuste si web otevřít na mobilu z jiné sítě. Nečekané přesměrování se často spouští jen pro mobilní návštěvníky.
Chcete web, který přivádí zákazníky?
Postavím vám ho na míru, s měřením a připravený na reklamy. Návrh dostanete zdarma a nezávazně.
Vybrat si termín hovoru →