Hackeři nečtou sitemapu. Čtou slabá místa v přihlášení

Proč se útočníci zaměřují právě na přihlášení

Ve většině incidentů není problém v homepage ani v sitemapě, ale v tom, jak web ověřuje identitu uživatele. Přihlašovací formulář je veřejně dostupný, opakovaně testovatelný a často má stejnou podobu na stovkách webů. Útočníkům stačí automatizované nástroje a databáze uniklých hesel, aby během minut zjistili, zda se někdo nepřihlašuje s „123456“, názvem firmy nebo jedním z tisíců dalších běžných hesel.

Podle dlouhodobých bezpečnostních reportů patří slabá nebo znovupoužitá hesla a zneužití přihlašovacích údajů mezi nejčastější příčiny průniků. V praxi to znamená jediné: i technicky dobře postavený web může padnout kvůli jedinému účtu bez vícefaktorového ověření.

Nejčastější slabiny: od hesel po obnovu přístupu

Bezpečnost přihlášení není jen o síle hesla. Z pohledu útočníka jde o celý řetězec kroků, který může narušit hned na několika místech.

  • Slabá nebo opakovaně použitá hesla – uživatelé často používají stejné heslo na více službách. Po úniku z jiné platformy pak útočník zkouší stejné údaje i u vás.
  • Chybějící rate limiting – pokud systém neomezuje počet pokusů, lze hesla hádat automatizovaně.
  • Absence MFA – bez druhého faktoru stačí jediný ukradený login a účet je ztracený.
  • Slabá obnova hesla – příliš jednoduché otázky, dlouho platné odkazy nebo předvídatelné tokeny výrazně zvyšují riziko.
  • Chyby v session managementu – špatně nastavené cookies, dlouhá platnost relace nebo chybějící ochrana proti session hijackingu.
  • Nejasné role a oprávnění – účet pro redaktora by neměl mít přístup k nastavení systému nebo objednávkám ve WooCommerce.

Právě kombinace více drobných chyb bývá nejnebezpečnější. Jeden slabý prvek sám o sobě nemusí stačit, ale dohromady vytvoří cestu k administraci nebo databázi zákazníků.

Co má mít moderní přihlášení: minimum, které už nestačí podcenit

Bezpečné přihlášení dnes není nadstandard, ale základ. U webů s administrací, zákaznickými účty nebo interními daty je vhodné nastavit několik vrstev ochrany současně.

  • Vícefaktorové ověření (MFA) pro administrátory, editory i účty s vyššími právy. Nejpraktičtější je TOTP aplikace nebo hardwarový klíč.
  • Silná politika hesel – délka minimálně 12 až 14 znaků, kontrola proti známým kompromitovaným heslům, ne jen proti jednoduchým pravidlům typu „1 velké písmeno a číslo“.
  • Rate limiting a lockout – omezení počtu pokusů z jedné IP nebo pro jeden účet. Pozor na příliš tvrdé blokace, které lze zneužít k útokům na dostupnost.
  • Bezpečná obnova hesla – jednorázové tokeny, krátká expirace, zrušení starých tokenů po použití a informování uživatele o změně.
  • Bezpečné cookies – atributy HttpOnly, Secure a SameSite podle typu aplikace.
  • Oddělení práv – princip nejmenších oprávnění. Každý účet má mít jen to, co opravdu potřebuje.

U WordPressu to znamená například omezit počet administrátorů, vypnout zbytečné registrace, chránit /wp-admin a u e-shopů oddělit účetní, sklad a marketing do různých rolí. U custom aplikací na Next.js nebo headless CMS je důležité řešit nejen frontend, ale hlavně API a správu tokenů.

Jak útok probíhá v praxi: od testování po převzetí účtu

Typický útok na přihlášení bývá tichý a postupný. Nejde o jeden dramatický průnik, ale o sérii testů, které mají objevit slabinu bez spuštění alarmu. Útočník nejdřív zkusí známé kombinace uživatelských jmen a hesel z úniků. Pokud systém nereaguje omezením, spustí slovníkové útoky nebo credential stuffing, tedy hromadné zkoušení ukradených přístupů z jiných služeb.

Další krok často míří na obnovu hesla. Pokud formulář pro reset posílá příliš detailní chybové hlášky, útočník zjistí, zda účet existuje. Pokud jsou odkazy dlouho platné nebo tokeny krátké a předvídatelné, může je zneužít. U některých webů se pak objevuje i obejití přes slabé API endpointy, které vracejí více informací, než mají.

V praxi se tak lze dostat k účtu bez jediného „hackerského“ triku. Stačí kombinace veřejných dat, automatizace a špatně nastaveného přihlášení.

Co kontrolovat na WordPressu, e-shopu i vlastním webu

Rizika se liší podle platformy, ale základní kontrolní seznam je podobný. U WordPressu je vhodné začít u přihlašovací stránky a administrace. Pokud je dostupná bez omezení, je dobré přidat ochranu proti automatizovaným pokusům, dvoufaktorové přihlášení a sledování neúspěšných loginů. Bezpečnostní pluginy jako Wordfence nebo iThemes Security umí výrazně pomoci, ale samy o sobě problém nevyřeší, pokud zůstane slabé heslo nebo zbytečně široká práva.

U WooCommerce je potřeba chránit nejen administraci, ale i zákaznické účty. Zvláštní pozornost si zaslouží reset hesla, změna e-mailu a fakturační údaje. U e-shopu je navíc důležité logovat neobvyklé přihlášení, například přístup z nové země nebo sérii neúspěšných pokusů z jedné adresy.

U vlastních aplikací a headless řešení je třeba kontrolovat autentizaci na úrovni API. Častou chybou bývá, že frontend vypadá bezpečně, ale endpointy vrací příliš mnoho informací nebo neověřují oprávnění konzistentně. U Next.js projektů je vhodné oddělit veřejné a chráněné route, tokeny ukládat bezpečně a session obnovovat s rozumnou expirací.

  • Pro WordPress: 2FA, limit pokusů, změna URL administrace jen s rozmyslem, kontrola pluginů a rolí.
  • Pro e-shop: ochrana zákaznických účtů, audit změn adres a objednávek, monitoring neobvyklých loginů.
  • Pro vlastní vývoj: bezpečné API, validace tokenů, CSRF ochrana, krátká životnost session.

Monitoring, logy a reakce: bezpečnost nekončí u hesla

I dobře nastavené přihlášení potřebuje dohled. Pokud nevidíte, co se děje, útok poznáte až ve chvíli, kdy někdo změní hesla, e-maily nebo přesměruje objednávky. Proto má smysl sledovat logy přihlášení, neúspěšné pokusy, změny oprávnění a přístupy z neobvyklých lokalit. U menších webů stačí základní alerty, u větších projektů je vhodné posílat data do SIEM nebo alespoň do centralizovaného log managementu.

Praktická rutina může vypadat jednoduše: jednou týdně zkontrolovat výstrahy, jednou měsíčně projít uživatelské role a jednou za čtvrt roku otestovat obnovu hesla i MFA. V případě incidentu je důležité mít připravený postup: okamžitě zablokovat podezřelý účet, vynutit změnu hesel, zrušit aktivní sessiony, prověřit změny v nastavení a zkontrolovat, zda nedošlo k exportu dat.

Nejde o to vytvořit neproniknutelný systém. Cílem je zvednout náklady útoku natolik, aby se útočník přesunul jinam. V prostředí, kde se denně skenují miliony přihlašovacích formulářů, bývá právě toto rozhodující rozdíl mezi běžným webem a webem, který přežije první vlnu automatizovaných útoků.