Jak ograniczyć liczbę prób logowania w WordPressie?
Autor: Eureka Studio · Zaktualizowano
Krótka odpowiedź
WordPress pozwala każdemu zgadywać hasła bez końca. Aby ograniczyć próby logowania, użyj wtyczki, która liczy nieudane logowania z danego IP w określonym oknie czasowym i blokuje ten adres na pewien czas — np. 8 nieudanych prób w 5 minut oznacza 15 minut czekania. Upewnij się, że liczą się też nieudane kody 2FA i hasła aplikacji, a własny IP dodaj do listy dozwolonych.
Kroki
1Krok 1
Zobacz, jak wygląda zgadywanie bez limitu
Bez limitu WordPress odpowiada na każde błędne hasło tym samym komunikatem, tyle razy, ile ktoś zapyta — a domyślny komunikat wręcz potwierdza, że dana nazwa użytkownika istnieje.

2Krok 2
Włącz Limity logowania i ustaw zasady
W WordPressie otwórz Hushfort → Limity i ograniczenia i włącz opcję Włącz limity logowania. Domyślnie to 8 nieudanych prób w ciągu 5 minut, a potem 15 minut blokady; po 4 blokadach w ciągu 24 godzin blokada trwa 1440 minut. Kliknij Zapisz zmiany.

3Krok 3
Dodaj swój IP do listy dozwolonych i sprawdź źródło IP
Niżej ustaw Źródło IP. „Automatycznie (tylko zweryfikowane nagłówki proxy)” pasuje do większości witryn, także tych za Cloudflare. Następnie dodaj IP biura lub domu w polu Dozwolone adresy IP, aby nigdy nie zablokować samego siebie, i zapisz.

4Krok 4
Otrzymuj e-mail, gdy IP zostanie zablokowany
Włącz E-mail z alertem i podaj jeden lub więcej adresów oddzielonych przecinkami. Ta opcja wymaga działającego SMTP w witrynie; bez niego Hushfort pozostawia ją wyłączoną i wyjaśnia dlaczego.

5Krok 5
Zobacz limit w działaniu
Po przekroczeniu dozwolonej liczby nieudanych prób IP zostaje zablokowany zamiast dostać kolejną szansę. Historia pokazuje każdą aktywną blokadę wraz z użytą nazwą użytkownika, liczbą prób i czasem końca blokady, z przyciskiem Odblokuj.
Dlaczego to ważne
Atak brute force to po prostu cierpliwość: spróbuj hasła, pomyl się, spróbuj następnego. WordPressowi to nie przeszkadza. Na tysiąc błędnych prób z tego samego adresu odpowie równie uprzejmie jak na pierwszą. Jeśli konto ma słabe lub powtórzone hasło, to tylko kwestia czasu.
Limit logowania zmienia rachunek. Jeśli IP może wykonać tylko kilka prób, zanim będzie musiał odczekać piętnaście minut, odgadnięcie przyzwoitego hasła zajmuje lata zamiast godzin. Do tego serwer nie musi w kółko generować strony logowania dla bota.
Czego sam nie obejmuje. Atakujący dysponujący tysiącami adresów IP mogą wysłać po kilka prób z każdego. Dlatego limit logowania działa najlepiej razem z uwierzytelnianiem dwuskładnikowym, dzięki któremu odgadnięte hasło jest bezużyteczne bez kodu.
Częste błędy
- Liczenie tylko formularza logowania. Hasła można też sprawdzać przez
xmlrpc.php, przez hasła aplikacji w REST API oraz na etapie kodu dwuskładnikowego. Jeśli te próby nie wliczają się do limitu, atakujący po prostu z nich korzystają. Zamknij też logowanie przez XML-RPC; zobacz, jak bezpiecznie wyłączyć XML-RPC. - Odczytywanie złego IP za proxy. Jeśli witryna stoi za Cloudflare, a wtyczka odczytuje adres
proxy, jeden bot może zablokować wszystkich odwiedzających. Jeśli zaś ślepo ufa nagłówkowi
X-Forwarded-For, bot może przy każdym żądaniu wymyślić nowy IP i nigdy nie zostać policzony. Bezpieczna zasada: ufaj nagłówkom proxy tylko wtedy, gdy żądanie naprawdę przychodzi z proxy. - Zbyt długie blokady. 24-godzinna blokada za trzy literówki karze Twój własny zespół. Pierwsza blokada powinna być krótka, a kolejne coraz dłuższe.
- Brak listy dozwolonych. Dodaj swój stały IP, aby zapomniane hasło nigdy Cię nie odcięło.
Bez wtyczki
WordPress ma hook wp_login_failed, który uruchamia się po każdym nieudanym logowaniu. Możesz
liczyć nieudane próby w transiencie i odmawiać logowania, gdy licznik jest za wysoki. Minimalna
wersja jako wtyczka obowiązkowa (wp-content/mu-plugins/login-limit.php):
<?php
add_action( 'wp_login_failed', function () {
$key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
$n = (int) get_transient( $key );
set_transient( $key, $n + 1, 15 * MINUTE_IN_SECONDS );
} );
add_filter( 'authenticate', function ( $user ) {
$key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
if ( (int) get_transient( $key ) >= 8 ) {
return new WP_Error( 'too_many', 'Too many failed attempts. Try again later.' );
}
return $user;
}, 30 );
To działa, ale bądźmy uczciwi co do braków: kod odczytuje tylko REMOTE_ADDR, więc za proxy liczy
proxy; nie liczy prób zgadywania przez XML-RPC multicall jako osobnych prób; nie ma listy
dozwolonych, e-maili z alertami ani dziennika. Każdy z tych elementów to kolejny kod do napisania
i utrzymania.
Niektórzy hostingodawcy oferują też narzędzia na poziomie serwera, np. fail2ban obserwujący dziennik dostępu. To mocne rozwiązanie, jeśli hosting uruchamia je za Ciebie; na hostingu współdzielonym zwykle nie da się go skonfigurować.
Jeśli coś pójdzie nie tak
- Zablokowałeś sam siebie. Poczekaj, aż blokada minie, spróbuj z innej sieci, np. z danych mobilnych, albo poproś innego administratora o dodanie Twojego IP do listy dozwolonych.
- Wszyscy zostają zablokowani naraz. Witryna jest prawdopodobnie za proxy, a wtyczka odczytuje IP proxy. Zmień ustawienie źródła IP.
- Blokady nigdy nie następują. Sprawdź, czy źródło IP nie ufa nagłówkowi, który boty mogą podrobić. Jeśli każda próba ma inny „IP”, to właśnie przyczyna.
Wszystkie sposoby na odzyskanie dostępu znajdziesz w artykule Zablokowany dostęp po zmianie adresu logowania.
Z Hushfort
Limity logowania należą do Hushfort Pro, płatnego dodatku instalowanego obok Hushfort Security, darmowej wtyczki bezpieczeństwa WordPress.
Warstwa Limity logowania w Hushfort liczy nieudane logowania na IP (lub na IP i nazwę użytkownika) w wybranym przez Ciebie oknie czasowym i blokuje IP na wybrany przez Ciebie czas. Powtarzające się blokady w ciągu 24 godzin mogą uruchomić dłuższą, wydłużoną blokadę.
- Nieudane kody dwuskładnikowe i nieudane logowania hasłami aplikacji też się liczą, więc nie ma bocznych drzwi do zgadywania.
- Nagłówkom proxy ufa się tylko wtedy, gdy żądanie naprawdę przychodzi z Cloudflare lub sieci prywatnej.
- E-maile z alertami trafiają na tyle adresów, ile podasz.
- Każda nieudana i zablokowana próba pojawia się w filtrowalnej Historii.
- Lista dozwolonych jest wspólna dla wszystkich warstw Hushfort, więc dodajesz się tylko raz.
Wyłączenie Hushfort znosi wszystkie istniejące blokady.
Najczęstsze pytania
Ile prób logowania warto dopuścić?
Czy WordPress domyślnie ogranicza próby logowania?
Czy limit logowania może zablokować mnie we własnej witrynie?
Czy ograniczenie prób logowania wystarczy, by zatrzymać brute force?
Dlaczego za Cloudflare blokady trafiają w niewłaściwe osoby?
Powiązane poradniki
Jak włączyć uwierzytelnianie dwuskładnikowe (2FA) w WordPressie?
Dodaj drugi krok logowania z dowolną aplikacją uwierzytelniającą. Włącz 2FA w WordPressie, zapisz kody odzyskiwania i wiedz, co zrobić po utracie telefonu.
Zobacz krokiCzym jest xmlrpc.php i jak wyłączyć XML-RPC w WordPressie?
xmlrpc.php to drugie drzwi logowania, których ukryta strona logowania nie zamyka. Jak bezpiecznie wyłączyć XML-RPC, zachować pingbacki i sprawdzić efekt.
Zobacz krokiJak zmienić adres logowania do WordPressa?
Zmień adres logowania WordPress i ukryj wp-admin w pięciu bezpiecznych krokach. Przetestuj przed wylogowaniem i sprawdź, jak wrócić, gdy zapomnisz adres.
Zobacz kroki
