Hushfort

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

  1. 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.

    Dwa błędne hasła wpisane w formularzu logowania WordPress; za każdym razem WordPress informuje, że hasło dla demo-admin jest nieprawidłowe, i przepuszcza kolejną próbę
  2. 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.

    Zakładka Limity i ograniczenia w Hushfort: limity logowania włączone, dozwolone nieudane próby 8, okno czasowe 5 minut i czas blokady 15 minut
  3. 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.

    Źródło IP ustawione na Automatycznie (tylko zweryfikowane nagłówki proxy) i adres 203.0.113.10 dodany w polu Dozwolone adresy IP
  4. 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.

    E-mail z alertem włączony, wpisane dwa adresy do alertów, ustawienia zapisane
  5. 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.

    Ekran Historia w Hushfort: Aktywne blokady dla trzech adresów IP z użytymi nazwami użytkowników, po 8 prób i 15 minut do końca, nad pełną historią nieudanych prób

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ć?

Tyle, by człowiek, który kilka razy się pomyli, mógł się zalogować, i na tyle mało, by zgadywanie nie miało sensu. Rozsądny środek to około 5–10 nieudanych prób w ciągu kilku minut z 15-minutową blokadą.

Czy WordPress domyślnie ogranicza próby logowania?

Nie. Rdzeń WordPressa przyjmuje nieograniczoną liczbę nieudanych logowań. Niektórzy hostingodawcy dodają limit na serwerze, więc warto zapytać swojego, ale nie można na tym polegać.

Czy limit logowania może zablokować mnie we własnej witrynie?

Może, jeśli będziesz ciągle mylić hasło. Dodaj swój IP do listy dozwolonych albo poczekaj, aż blokada minie. Inny administrator też może dodać Twój IP do listy dozwolonych.

Czy ograniczenie prób logowania wystarczy, by zatrzymać brute force?

Spowalnia zgadywanie do żółwiego tempa, ale atakujący z wieloma adresami IP mogą rozłożyć próby. Połącz je z uwierzytelnianiem dwuskładnikowym, silnymi hasłami i zamknięciem logowania przez XML-RPC.

Dlaczego za Cloudflare blokady trafiają w niewłaściwe osoby?

Za proxy każdy odwiedzający może wyglądać, jakby przychodził z IP tego proxy. Ustaw źródło IP tak, by wtyczka ufała nagłówkowi z prawdziwym IP — i tylko wtedy, gdy żądanie naprawdę przychodzi z tego proxy.

Zgłoś błąd lub zaproponuj funkcję

Twoja wiadomość trafia prosto do zespołu, który tworzy Hushfort.

Czego dotyczy?

Używany tylko do odpowiedzi.

Używamy tych danych wyłącznie, aby Ci odpowiedzieć. Prywatność