Útoky na přihlášení do WordPress se za poslední měsíce výrazně změnily. Místo jednoho stroje, který zkouší tisíce hesel, dnes přicházejí tisíce IP adres, z nichž každá zkusí jen pár hesel za hodinu. Ochrana založená na limitu pokusů z jedné adresy takový útok nevidí. Od 28. září 2026 proto weby chráněné WEDOS Global Protection (WGP) chrání přihlašovací stránku WordPress jinak: krátkou kontrolou proof-of-work, kterou projde prohlížeč, ale ne skript. Počet pokusů o přihlášení, které dorazily až na servery webů, klesl v následujících dnech o 75 %.
Jak dnes vypadá útok na wp-login.php
Přihlašovací stránka wp-login.php je jedním z nejčastějších cílů automatizovaných útoků na internetu. Útočníci na ni posílají buď běžná a uniklá hesla (brute force), nebo dvojice jméno a heslo uniklé z jiných služeb (credential stuffing).
Klasická obrana je jednoduchá: když jedna IP adresa zkusí příliš mnoho hesel za krátkou dobu, ochrana ji zastaví. To funguje, dokud útok přichází z malého počtu adres.
Moderní kampaně se ale rozkládají. Dobře je to vidět na jedné konkrétní kampani, která koncem září běžela několik dní z jedné sítě poskytovatele serverů:
- až 187 tisíc pokusů o přihlášení denně
- každý den z přibližně 6 000 různých IP adres
- každá adresa poslala jen několik pokusů za hodinu.
Žádná jednotlivá adresa se nechovala nápadně, a limitem na adresu proto prošly všechny pokusy. Útok jako celek byl obrovský, každý jeho kousek vypadal nevinně.
Tuto kampaň jsme nakonec 27. září zastavili ručně, zablokováním celé její sítě. To jde u jedné výrazné kampaně, ne jako plošné řešení. Útoky na přihlášení k WordPress přicházejí denně z tisíců různých sítí. Často se jedná o počítače z rezidentních sítí, nikoliv z datacenter.
Proč nestačí limit na adresu
Limit pokusů z jedné adresy předpokládá, že útočník má adres málo a pokusů hodně. Když je poměr opačný, limit se nikdy nespustí. Snižovat ho donekonečna nejde, protože by začal zasahovat skutečné uživatele, kteří zapomenou heslo nebo se přihlašují z jedné sdílené adresy, třeba z firemní sítě.
Potřebovali jsme tedy rozlišovat podle toho, kdo se přihlašuje, ne podle toho, kolikrát to zkouší.
Co jsme změnili
Dřív ochrana zasáhla teprve tehdy, když jedna adresa překročila limit pokusů.
Teď musí každý, kdo přijde na přihlašovací stránku WordPress poprvé, projít krátkou kontrolou typu proof-of-work:
- Prohlížeč na pozadí vyřeší jednoduchou výpočetní úlohu. Člověk vidí zhruba vteřinové kolečko a nic nevyplňuje, žádné obrázky ani zaškrtávání.
- Skript, který posílá přihlašovací požadavky bez skutečného prohlížeče, kontrolou neprojde. Nezáleží na tom, z kolika adres to zkouší.
- Při běžném přihlašování se kontrola neopakuje.
- Funguje i pro WordPress nainstalovaný v podadresáři.
- Přihlášení jedním kliknutím ze zákaznické administrace a přihlašovací widgety na webech fungují dál.
- Zákazník nemusí nic nastavovat, ochrana se zapnula automaticky.
Čeho se změna týká a čeho ne
Kontrola platí jen pro adresu wp-login.php. Mobilní aplikace WordPress, REST API (wp-json), XML-RPC, WP-CLI a správcovské nástroje, které pracují přes API, ovlivněny nejsou.
Pozor si ale musí dát ten, kdo má na přihlašovací stránku namířený monitoring dostupnosti nebo vlastní skript. Klient bez prohlížeče kontrolu nevyřeší a dostane odpověď 401, takže monitoring začne hlásit problém. Řešení:
- nastavit monitoring na jinou stránku webu, nebo
- povolit IP adresu monitoringu či skriptu ve výjimkách ochrany. Pravidlo „povolit“ pro konkrétní IP adresu kontrolu přeskočí.
Výsledek: co dorazilo až na servery webů
Čísla pocházejí z agregovaných logů WEDOS Global Protection z vrstvy těsně před odesláním na origin server zákazníka. Porovnáváme denní průměry týdne před změnou (21. až 27. září) s prvními třemi celými dny po ní (29. září až 1. října). Den 28. září, kdy se změna nasazovala, jsme vynechali. Kampaň z úvodu jsme z čísel „před“ odečetli, protože ji zastavila ruční blokace a srovnání by jinak nafukovala.
| Denní průměr | Před (21.–27. 9.) | Po (29. 9.–1. 10.) | Změna |
|---|---|---|---|
| Pokusy o přihlášení | ~203 000 | ~51 000 | −75 % |
| z toho se špatným heslem | ~167 000 | ~36 000 | −79 % |
| Weby, na které pokusy dorazily | ~23 500 | ~6 000 | −74 % |
Pokles začal 28. září odpoledne, přesně ve chvíli, kdy se změna spustila. Dopoledne téhož dne, kdy už platily jiné úpravy ochrany proti botům nasazené o půlnoci, se počty nezměnily.
Na druhé straně je to, co ochrana zastavila: 330 až 430 tisíc pokusů denně, mířených na 50 až 64 tisíc webů, z přibližně 45 tisíc IP adres ve 4 800 různých sítích. Přesně takový roztříštěný útok, na který limit z jedné adresy nestačil a který nejde zastavit blokováním jednotlivých sítí.
Poctivě je třeba dodat, že i v dnech po změně jsme dál upravovali ochranu proti botům. Hlavní podíl na poklesu má ale nová kontrola: ochrana ji denně uvádí jako důvod zastavení u stovek tisíc požadavků.
Tři dny po změně jsou krátké období. Čísla budeme sledovat dál. Nicméně už teď vidíme, že útočníci přestávají zkoušet WordPress weby chráněné WEDOS Global Protection.
Dotklo se to běžného přihlašování?
Podle dat ne. U přihlášení z Česka se počet úspěšných přihlášení ani počet WordPress webů, kam se lidé přihlašují, nezměnil. V pracovní dny šlo o zhruba 4 450 úspěšných přihlášení denně před změnou a 4 600 po ní, na přibližně 2 040 webů v obou obdobích.
Co to znamená pro majitele webů
- Méně rizika prolomení hesla. Na přihlašovací stránku se k hádání hesel dostane zlomek dřívějších pokusů.
- Méně zátěže serveru. Každý pokus o přihlášení spouští PHP a dotaz do databáze. Stovky tisíc zbytečných požadavků denně teď na servery vůbec nedorazí.
- Žádné nastavení. Kontrola se zapnula sama a běžný uživatel ji skoro nezaznamená. Výjimkou je monitoring nebo skript namířený přímo na
wp-login.php.
Proof-of-work ale nenahrazuje dobré heslo. Doporučujeme dál používat silná a jedinečná hesla, dvoufázové ověření a aktuální WordPress.
Co jsme se naučili
- Počet pokusů z jedné adresy už není dobrý signál. Útočníci mají adres dost na to, aby každá zůstala pod jakýmkoli rozumným limitem.
- Ruční blokace sítí neškáluje. Jednu výraznou kampaň zastavit jde, tisíce sítí denně ne.
- Lepší je ptát se, kdo přichází, než kolikrát. Kontrola, kterou projde prohlížeč, ale ne skript, zastaví útok bez ohledu na to, na kolik adres a sítí je rozložený.
- Výsledek je potřeba měřit i na straně běžného provozu. Pokles útoků je jen polovina výsledku. Druhá polovina je, že přihlašování zůstalo na stejné úrovni.

