Jak zabezpečit web
Váš web si nikdo osobně nevybral. Jezdí po něm automaty, které zkoušejí známé díry a slabá hesla, a je jim jedno, jestli za ním stojí truhlář z Vysočiny nebo banka.
Weby malých firem nehackuje člověk, ale robot
Skoro nikdo si nevybere váš web osobně. Po internetu jezdí automaty, které zkoušejí známé díry v systémech a slabá hesla, a je jim jedno, kdo za webem stojí. Nový web se v mých logech dočká prvního pokusu o přihlášení do administrace obvykle do 48 hodin od spuštění.
Cíl útoku většinou není váš obsah. Napadený web slouží jako rozesílač spamu, jako odrazový můstek pro další útoky nebo se do něj vloží skryté odkazy na cizí stránky. Majitel o tom neví měsíce, dokud web nezačne ve výsledcích vyhledávání hlásit varování a nespadne mu návštěvnost.
Právě proto se zabezpečení dělá dopředu a levně. Základní opatření se dají zapnout za jedno odpoledne. Úklid napadeného webu, obnova ze zálohy, kontrola všech souborů a žádost o odstranění varování stojí mnohonásobně víc a hlavně vás na několik dní úplně vyřadí z provozu.
SSL je začátek, hlavičky jsou zbytek
Certifikát dnes není konkurenční výhoda, je to podmínka. Prohlížeč bez něj označí formulář jako nezabezpečený a lidé odejdou. Certifikát od Let's Encrypt je zdarma a obnovuje se sám, takže jediné, co může selhat, je vypnutá automatická obnova. Upozornění na blížící se konec platnosti mám u klientů zapnuté třicet dní předem.
Samotný certifikát ale nezajistí, aby se web nedal načíst i přes nešifrované spojení. Proto vždy nastavuji trvalé přesměrování na HTTPS a hlavičku HSTS. K tomu patří pár dalších hlaviček, které stojí deset minut práce a zavřou celou skupinu útoků na obsah stránky.
- Přesměrování veškerého provozu z HTTP na HTTPS pomocí 301
- Hlavička Strict-Transport-Security s platností alespoň jeden rok
- Content-Security-Policy, aby se na stránce nespustil cizí skript
- X-Content-Type-Options a Referrer-Policy jako základní hygiena
- Zákaz vkládání webu do cizího rámce přes pravidlo frame-ancestors
- Upozornění na blížící se konec platnosti certifikátu, ideálně 30 dní předem
Aktualizace: plugin, který nikdo neotevřel dva roky
Naprostá většina napadených webů, které jsem řešil, padla přes zastaralý doplněk, ne přes prolomené heslo. Díra se zveřejní, útočné automaty ji začnou zkoušet během několika hodin a vy máte na aktualizaci reálně jeden den. Web, na kterém se aktualizuje jednou za rok, je prakticky otevřený.
Řešením není klikat na Aktualizovat naslepo. Postup, který používám, je zálohovat, aktualizovat na testovací kopii, projít web a teprve pak nasadit na produkci. U klientů to dělám jednou měsíčně v pevný den, aby se z toho nestalo odkládání. Kritické bezpečnostní záplaty nasazuji okamžitě.
Druhá polovina problému je zbytečný software. Každý nainstalovaný doplněk je další kód, který někdo musí udržovat. U jednoho klienta jsem odstranil čtrnáct doplňků, které nikdo nepoužíval, a web se navíc zrychlil o 1,2 vteřiny. Nejlepší zabezpečení je nemít na webu nic, co tam nemusí být.
Hesla a přístupy: tady to padá nejčastěji
Uživatelské jméno admin, heslo podle názvu firmy s rokem na konci a jeden účet sdílený mezi grafikem, marketérem a bývalým brigádníkem. Tohle vidím pořád. Účet po člověku, který ve firmě skončil, bývá aktivní i po roce a nikdo o něm neví, dokud se přes něj něco nestane.
Základ zabere půl hodiny. Každý člověk má vlastní účet s vlastními právy, správci jsou maximálně dva, dvoufázové ověření je zapnuté a hesla žijí ve správci hesel, ne v poznámkách v telefonu. Při odchodu spolupracovníka se účet ruší tentýž den, ne až se na to někdo rozpomene.
- Zrušit výchozí jméno admin a založit vlastní účet správce
- Zapnout dvoufázové ověření u administrace, hostingu i domény
- Rozdělit role, redaktor nepotřebuje práva na instalaci doplňků
- Omezit počet pokusů o přihlášení a přidat prodlevu po třech chybách
- Projít seznam uživatelů jednou za čtvrt roku a smazat neaktivní účty
- Hesla ukládat výhradně do správce hesel a nikdy je neposílat e-mailem
Spam ve formulářích: honeypot dřív než captcha
Spam ve formuláři není bezpečnostní díra, ale zabije vám poptávky. Když chodí čtyřicet nesmyslných zpráv denně, přestanete schránku číst a přehlédnete skutečného zákazníka. Zároveň se vám rozbije měření, protože každý robot vygeneruje konverzi a čísla v reklamním účtu přestanou odpovídat realitě.
První obranu dělám neviditelně. Skryté pole, které člověk nevyplní a robot ano, plus kontrola času odeslání, protože skutečný člověk nevyplní formulář za dvě vteřiny. Tahle dvojice odfiltruje zhruba devadesát procent spamu a nikoho neotravuje klikáním na obrázky se semafory.
Teprve když spam pokračuje, přidávám neviditelnou captchu a omezení počtu odeslání z jedné IP adresy. Viditelnou captchu s obrázky nasazuji jako poslední možnost, protože každý krok navíc snižuje počet odeslaných formulářů, u návštěvníků z mobilu klidně o celou desetinu.
Co stojí prevence a co stojí incident
Zabezpečení nemá vlastní ceník, protože je součástí stavby a provozu. Web od 19 990 Kč dodávám s HTTPS, hlavičkami, ochranou formulářů a rozdělenými přístupy. Doplnit tohle dodatečně na existující cizí web vychází podle jeho stavu zhruba na 3 000 až 8 000 Kč.
Provoz za 990 Kč měsíčně kryje monitoring dostupnosti, certifikát a zálohy. Péče za 2 990 Kč měsíčně přidává měsíční aktualizace na testovací kopii, kontrolu uživatelů a hlídání změn v souborech. Rozdíl mezi těmito dvěma úrovněmi je přesně to, co odděluje web, který přežije, od webu, který se čistí.
Cena incidentu je jiná liga. Vyčištění napadeného webu, kontrola všech souborů, obnova ze zálohy a žádost o odstranění varování zaberou dva až pět dnů. K přímým nákladům připočtěte týden bez poptávek a propad pozic, který se pak dorovnává celý měsíc.
- Nechte web běžet na podporované verzi PHP, staré verze už opravy nedostávají
- Zakažte úpravu souborů přímo z administrace, tudy se vkládá cizí kód nejrychleji
- Zapněte upozornění na změnu souborů, nový soubor v cizí složce je první signál
- Neposílejte přístupy k hostingu e-mailem, používejte jednorázový odkaz
- Držte kopii webu v Gitu, porovnání s čistou verzí zrychlí úklid o hodiny
| Opatření | Orientační cena | Co řeší |
|---|---|---|
| SSL certifikát s automatickou obnovou | 0 Kč u většiny hostingů | Šifrování přenosu a důvěryhodnost v prohlížeči |
| Bezpečnostní hlavičky a HSTS | Součást stavby webu od 19 990 Kč | Vkládání cizího skriptu a odposlech na veřejné wifi |
| Ochrana formulářů proti spamu | 1 500 až 3 000 Kč jednorázově | Roboti, kteří zaplavují schránku a kazí měření |
| Měsíční aktualizace a monitoring | Péče 2 990 Kč měsíčně | Známé díry v doplňcích a nezpozorované výpadky |
| Úklid po napadení | 15 000 až 60 000 Kč a několik dní práce | Následek toho, že se prevence odkládala |
Časté otázky
Potřebuje malý firemní web opravdu víc než certifikát?
Ano. Certifikát řeší jen šifrování přenosu, neřeší zastaralý doplněk ani slabé heslo. Roboti zkoušejí přihlášení do administrace u každého webu bez ohledu na velikost firmy. Minimum, které dává smysl, je aktuální systém, dvoufázové ověření, ochrana formulářů a záloha mimo hosting. Dohromady jde o práci na jedno odpoledne.
Jak poznám, že je web napadený?
Typické signály jsou náhlý nárůst odchozích e-mailů, neznámé soubory ve složkách s nahranými fotkami, přesměrování na cizí stránky jen u návštěvníků z mobilu a varování v Search Console. Podezřelý je i skokový nárůst stránek v indexu, útočník tam obvykle přidá stovky adres s odkazy na cizí weby.
Zpomalí zabezpečení web?
Správně nastavené hlavičky a ochrana formulářů nemají na rychlost měřitelný vliv. Zpomalují až těžké bezpečnostní doplňky, které kontrolují každý požadavek, a viditelné captchy, které načítají cizí skripty. Proto řeším zabezpečení na úrovni serveru a kódu, ne instalací dalšího doplňku do administrace.
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 →