← Zpět na blog |

Brute force útok na WordPress: Jak zastavit opakované pokusy o přihlášení

WordPress standardně neomezuje počet pokusů o přihlášení. Zjistěte, jak zastavit brute force útoky na wp-login.php a XML-RPC dříve, než bude pozdě.

Brute force útok na WordPress: Jak zastavit opakované pokusy o přihlášení

Podívejte se do logů svého hostingu. S velkou pravděpodobností tam najdete stovky, možná tisíce záznamů tohoto typu:

POST /wp-login.php 200 - 1.2.3.4
POST /wp-login.php 200 - 1.2.3.4
POST /wp-login.php 200 - 5.6.7.8

Toto je brute force útok. A pravděpodobně probíhá na vašem webu teď — jen ho nevidíte.

Brute force útoky na WordPress jsou tak běžné, že většina hostingů je tiše ignoruje. Útočníkovi stačí jeden úspěšný pokus z tisíce, aby získal přístup k vašemu administračnímu panelu. A od té chvíle je web v jeho rukou.


Co je brute force útok?

Brute force (česky: útok hrubou silou) je metoda, při které útočník automatizovaně zkouší tisíce kombinací uživatelských jmen a hesel, dokud nenajde správnou.

WordPress je pro tento typ útoku ideálním cílem, protože:

  • Přihlašovací stránka /wp-login.php je u všech instalací na stejném místě
  • WordPress standardně neomezuje počet neúspěšných pokusů o přihlášení
  • Existují veřejné databáze s miliony odcizených přihlašovacích údajů
  • Útok lze zautomatizovat a spustit na tisíce webů současně pomocí botnetů

Útočníci nemusí hádat hesla náhodně. Používají slovníkové útoky — seznamy nejpoužívanějších hesel (password123, admin, wordpress, atd.) a uniklých hesel z datových úniků.


XML-RPC: Zadní vrátka, o kterých nevíte

Vedle /wp-login.php existuje druhý oblíbený cíl brute force útoků: soubor xmlrpc.php.

XML-RPC je rozhraní, které umožňuje vzdálený přístup k WordPressu — původně navrženo pro mobilní aplikace a externí nástroje. Dnes je ve většině instalací nepotřebné, ale stále aktivní.

Pro útočníky je xmlrpc.php atraktivnější než wp-login.php, protože:

  • Umožňuje vyzkoušet tisíce hesel v jednom požadavku (pomocí metody system.multicall)
  • Je hůře monitorovaný — většina bezpečnostních pluginů sleduje /wp-login.php, ne XML-RPC
  • Mnoho firewall pravidel XML-RPC záměrně ignoruje

Typický XML-RPC útok nezanechá v logu přihlašovací stránky žádnou stopu — ale zvýší zatížení serveru a spotřebu CPU.


Jak poznat, že jste pod útokem

Symptomy v logu serveru

POST /xmlrpc.php 200 — tisíce záznamů za hodinu
POST /wp-login.php 200 — stovky záznamů z různých IP adres

Symptomy na webu a serveru

  • Web se načítá pomaleji než obvykle bez jasného důvodu
  • Hosting vám poslal upozornění na překročení CPU nebo databázových dotazů
  • Dostali jste e-mail od hostingu o "neobvyklé aktivitě"
  • V logu WordPressu nebo bezpečnostního pluginu vidíte záznamy o neúspěšných přihlášeních z různých zemí

Nejhorší scénář: útok byl úspěšný

Pokud útočník získal přístup, typické příznaky zahrnují:

  • Nový administrátorský účet, který jste nevytvořili
  • Změny v nastavení webu (e-mailová adresa, URL webu)
  • Nové soubory ve složce uploads nebo v kořenovém adresáři
  • Přesměrování na cizí weby

6 opatření, která brute force útok zastaví nebo výrazně ztíží

1. Omezte počet pokusů o přihlášení

Nejjednodušší a nejefektivnější opatření. Plugin jako Limit Login Attempts Reloaded nebo WP Cerber po nastaveném počtu neúspěšných pokusů zablokuje IP adresu na definovanou dobu.

Doporučené nastavení:

  • Maximálně 3–5 pokusů před blokováním
  • Blokování na 30–60 minut
  • Trvalé blokování po opakovaném překročení limitu

2. Vypněte nebo chraňte XML-RPC

Pokud nepoužíváte mobilní aplikaci WordPress, vzdálené publikování nebo WooCommerce v kombinaci s externími systémy, XML-RPC nepotřebujete. Vypněte ho:

Přes .htaccess:

<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

Přes plugin: Wordfence, WP Cerber nebo Disable XML-RPC-API umožňují XML-RPC zakázat jedním kliknutím.

Pozor: Nejdříve ověřte, zda XML-RPC aktivně nepoužíváte (Jetpack a některé pluginy na něm závisí).

3. Přejmenujte nebo přesuňte přihlašovací stránku

Přejmenování /wp-login.php na vlastní URL (např. /moje-prihlaseni-2026/) eliminuje drtivou většinu automatizovaných útoků — roboti útočí na výchozí cestu, nikoli na vaši vlastní.

Plugin WPS Hide Login toto umožňuje bez zásahu do kódu.

Důležité: Novou URL si poznamenejte a nikde veřejně nezveřejňujte.

4. Přidejte dvoufaktorové ověření (2FA)

I kdyby útočník získal správné heslo, 2FA mu přihlášení neumožní bez přístupu k vašemu telefonu nebo autentizační aplikaci.

Doporučené pluginy: WP 2FA, Google Authenticator, Wordfence Login Security.

2FA je obzvláště důležité pro administrátorské účty — u méně privilegovaných rolí (editor, autor) je volitelné.

5. Nastavte Web Application Firewall (WAF)

WAF filtruje provoz ještě před tím, než se požadavek dostane k WordPressu. Dokáže blokovat útočné IP adresy, geograficky omezit přístup nebo automaticky rozpoznat vzory brute force útoku.

Možnosti:

  • Cloudflare (free tier zahrnuje základní WAF a rate limiting)
  • Wordfence (plugin s vlastním WAF)
  • Sucuri (cloudový WAF s CDN)

6. Používejte silná, unikátní hesla — a správce hesel

Útok slovníkem je neúčinný proti heslu, které nevychází z žádného slovníku. Heslo jako Tr9#mK!2vBx@qL nelze prolomit slovníkovým útokem v reálném čase.

Použijte správce hesel (Bitwarden, 1Password, KeePass) — nevymýšlejte hesla sami, nechte je vygenerovat.

Minimální požadavky na admin heslo:

  • Délka alespoň 16 znaků
  • Kombinace velkých/malých písmen, číslic a speciálních znaků
  • Unikátní — nepoužívané nikde jinde

Co dělat, když útok probíhá právě teď

Pokud vidíte v logu masivní nárůst požadavků na /wp-login.php nebo xmlrpc.php:

Krok 1: Přidejte rate limiting na Cloudflare nebo požádejte hosting o dočasné blokování podezřelých IP rozsahů.

Krok 2: Zkontrolujte seznam uživatelů WordPressu — zda nebyl vytvořen nový admin účet.

Krok 3: Zkontrolujte soubory v kořenovém adresáři a složce uploads — zda nebyly přidány nové PHP soubory.

Krok 4: Změňte heslo administrátorského účtu ihned.

Krok 5: Aktivujte 2FA ještě před dalším přihlášením.

Pokud je útok úspěšný — tedy pokud útočník přihlašovací údaje získal — jde o bezpečnostní incident, který vyžaduje kompletní forenzní analýzu, nikoli jen změnu hesla.


Proč "dočasná opatření" nestačí

Blokování IP adresy útočníka je neúčinné, pokud útok probíhá přes botnet. Každý bot má jinou IP adresu — zablokujete jednu, přijdou desítky dalších.

Trvalé řešení musí být systémové:

  • Omezení pokusů na úrovni aplikace
  • WAF s rate limitingem na úrovni sítě
  • Silná autentizace (2FA)
  • Monitoring a alerting při anomálním provozu

Právě tento přístup implementujeme v rámci balíčku SHIELD — od nastavení WAF přes 2FA až po kontinuální monitoring přihlašovacích pokusů.


Shrnutí

Brute force útoky jsou nejčastější vstupní bránou útočníků do WordPress webů — a WordPress vám proti nim standardně nedává žádnou ochranu. Chybí vám limitování pokusů, ochrana XML-RPC i 2FA.

Dobrou zprávou je, že všechna klíčová opatření lze implementovat za jeden odpoledne. Špatnou zprávou je, že pokud tato opatření nemáte, útok pravděpodobně probíhá právě teď — jen ho nevidíte v přihlašovacích pokusech, protože útočník používá XML-RPC.

Zkontrolujte si logy. A pak jednejte.


Potřebujete rychlou implementaci ochrany nebo zjistili jste, že útok byl úspěšný? Kontaktujte nás — reagujeme do 2 hodin.