Poradnik naprawy

Zapobieganie enumeracji użytkowników w WordPress

8 lutego 2026 Zaktualizowano 19 kwi 2026

Enumeracja użytkowników to technika rozpoznania, której atakujący używają do odkrywania ważnych nazw użytkowników na Twojej witrynie WordPress. Jest to zazwyczaj pierwszy krok do ataku brute-force. Jeśli atakujący zna Twoją nazwę użytkownika administratora, musi tylko zgadnąć hasło. Jeśli nie zna nazwy użytkownika, powierzchnia ataku jest znacznie większa. Blokując enumerację, zmuszasz atakujących do zgadywania zarówno nazwy użytkownika, jak i hasła, co czyni udany atak znacznie mniej prawdopodobnym.

Jak atakujący enumerują nazwy użytkowników WordPress

Istnieje kilka metod, których atakujący używają do odkrywania nazw użytkowników na witrynie WordPress. Zrozumienie każdej z nich pomoże Ci wiedzieć, przed czym się chronić.

  • URL archiwów autorów: WordPress domyślnie tworzy archiwa autorów pod /author/nazwa-uzytkownika/. Atakujący może odwiedzić ?author=1, ?author=2 i tak dalej. WordPress przekierowuje je do odpowiedniego URL archiwum autora, który zawiera nazwę użytkownika w postaci jawnej. Automatyczne skrypty mogą bardzo szybko iterować po ID autorów, aby zbudować kompletną listę nazw użytkowników.
  • Endpoint users w REST API: REST API WordPress udostępnia endpoint /wp-json/wp/v2/users, który zwraca tablicę JSON wszystkich użytkowników, którzy opublikowali wpisy. Zawiera nazwy użytkowników, nazwy wyświetlane i ID użytkowników. Domyślnie nie jest wymagana autoryzacja, aby uzyskać dostęp do tego endpointu.
  • Komunikaty błędów logowania: Gdy wprowadzisz nieprawidłową nazwę użytkownika na stronie logowania WordPress, komunikat błędu mówi coś w stylu "Nazwa użytkownika X nie jest zarejestrowana". Gdy wprowadzisz prawidłową nazwę użytkownika, ale złe hasło, mówi "Hasło, które wprowadziłeś dla nazwy użytkownika X jest nieprawidłowe". Ta różnica mówi atakującemu, czy nazwa użytkownika istnieje.
  • Odpowiedzi oEmbed: Linki discovery oEmbed WordPress w źródle strony mogą ujawnić informacje o autorze, gdy inne witryny próbują osadzić Twoją treść.
  • XML-RPC: Endpoint xmlrpc.php może być używany do testowania kombinacji nazwa użytkownika/hasło za pomocą metody wp.getUsersBlogs. Choć jest to bardziej wektor brute-force, potwierdza ważne nazwy użytkowników przez różne odpowiedzi błędów.

Dlaczego enumeracja użytkowników ma znaczenie dla bezpieczeństwa

Sama w sobie znajomość nazwy użytkownika nie zagraża Twojej witrynie. Ale ułatwia wszystko inne atakującemu. Rozważmy atak brute-force: jeśli atakujący musi zgadnąć zarówno nazwę użytkownika, jak i hasło, liczba możliwych kombinacji jest ogromna. Jeśli już wie, że nazwa użytkownika to "admin" lub "john", musi skupić się tylko na haśle. W połączeniu z popularnymi listami haseł może to prowadzić do udanego włamania w ciągu minut, a nie lat.

Dodatkowo odkryte nazwy użytkowników mogą być używane w ukierunkowanych atakach phishingowych. Jeśli atakujący wie, że Twoje konto administratora to "sarah.johnson", może tworzyć bardziej przekonujące e-maile socjotechniczne.

Blokowanie enumeracji archiwów autorów

Dodaj ten kod do pliku functions.php swojego motywu lub niestandardowej wtyczki. Przechwytuje żądania z parametrem ?author=N i przekierowuje je na stronę główną zamiast ujawniać nazwę użytkownika:

/**
 * Block user enumeration via author parameter
 */
function block_author_enumeration() {
    if (is_admin()) return;

    if (isset($_REQUEST['author']) && is_numeric($_REQUEST['author'])) {
        wp_redirect(home_url(), 301);
        exit;
    }
}
add_action('init', 'block_author_enumeration');

Obsługuje to najczęstszą metodę enumeracji. Sprawdzenie is_admin() zapewnia, że funkcjonalność backendu nie jest naruszona. Przekierowanie używa kodu statusu 301, który mówi wyszukiwarkom, aby zaktualizowały swój indeks (na wypadek, gdyby URL archiwów autorów były wcześniej indeksowane).

Wyłączanie endpointu users REST API

Poniższy kod usuwa endpoint users z REST API dla niezalogowanych odwiedzających. Uwierzytelnieni użytkownicy (tacy jak administratorzy i redaktorzy) nadal mają dostęp, co zachowuje funkcjonalność edytora bloków i innych narzędzi administracyjnych:

/**
 * Remove REST API users endpoint for unauthenticated requests
 */
add_filter('rest_endpoints', function($endpoints) {
    if (!is_user_logged_in()) {
        if (isset($endpoints['/wp/v2/users'])) {
            unset($endpoints['/wp/v2/users']);
        }
        if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
            unset($endpoints['/wp/v2/users/(?P[\d]+)']);
        }
    }
    return $endpoints;
});

Po dodaniu tego kodu nieuwierzytelnione żądania do /wp-json/wp/v2/users zwrócą błąd 404 zamiast wyliczać Twoich użytkowników.

Sanityzacja komunikatów błędów logowania

WordPress wyświetla różne komunikaty błędów dla "nieprawidłowa nazwa użytkownika" i "złe hasło". Ujawnia to, czy dana nazwa użytkownika istnieje w witrynie. Rozwiązanie jest proste: zwracaj ten sam ogólny komunikat dla wszystkich niepowodzeń logowania:

/**
 * Use a generic login error message
 */
add_filter('login_errors', function() {
    return 'Invalid username or password.';
});

Dzięki tej zmianie atakujący nie może określić, czy próba logowania nie powiodła się z powodu złej nazwy użytkownika czy złego hasła. Oba przypadki dają tę samą odpowiedź.

Usuwanie linków discovery oEmbed

WordPress dodaje linki discovery oEmbed w nagłówku HTML Twoich stron. Te linki mogą ujawnić informacje o autorze, gdy inne witryny próbują osadzić Twoją treść. Usuń je jedną linią:

remove_action('wp_head', 'wp_oembed_add_discovery_links');

Nie wpływa to na Twoją zdolność osadzania treści z innych witryn. Zapobiega tylko temu, aby inne witryny automatycznie wykrywały osadzalną treść na Twojej witrynie.

Blokowanie enumeracji autorów przez .htaccess

Jeśli używasz Apache, możesz dodać przekierowanie na poziomie serwera, które blokuje enumerację autorów, zanim WordPress zostanie nawet załadowany. Jest to bardziej wydajne niż rozwiązanie oparte na PHP, ponieważ nie wymaga przetwarzania PHP:

# Block user enumeration via author parameter
RewriteCond %{QUERY_STRING} ^author=\d+ [NC]
RewriteRule .* /? [R=301,L]

Umieść to w pliku .htaccess przed regułami rewrite WordPress. Przechwytuje każde żądanie z parametrem zapytania author= zawierającym liczbę i przekierowuje na stronę główną.

Rozwiązania oparte na wtyczkach

Jeśli wolisz nie dodawać kodu ręcznie, kilka wtyczek bezpieczeństwa obsługuje zapobieganie enumeracji użytkowników:

  • Stop User Enumeration: Ukierunkowana, lekka wtyczka, która specjalnie blokuje skany autorów i listy użytkowników REST API. Robi jedną rzecz i robi to dobrze.
  • iThemes Security (Solid Security): Kompletny pakiet bezpieczeństwa z ochroną przed enumeracją użytkowników obok funkcji takich jak uwierzytelnianie dwuskładnikowe, wykrywanie zmian plików i ochrona przed brute-force. Blokada enumeracji znajduje się w sekcji "WordPress Tweaks".
  • Wordfence: Głównie firewall i skaner malware, ale reguły firewalla mogą blokować próby enumeracji. Wersja darmowa oferuje podstawową ochronę; wersja premium dodaje reguły firewalla w czasie rzeczywistym.
  • All In One WP Security: Darmowa, przyjazna dla początkujących wtyczka z opcją zapobiegania enumeracji użytkowników w sekcji User Accounts > WP Username. Oferuje również firewall i funkcje blokady logowania.

Testowanie enumeracji na własnej witrynie

Przed i po wdrożeniu tych zabezpieczeń powinieneś przetestować, czy enumeracja nadal działa. Oto jak to zrobić:

  • Test archiwum autora: Otwórz okno trybu prywatnego przeglądarki i odwiedź https://twojawitryna.pl/?author=1. Jeśli ochrona działa, powinieneś zostać przekierowany na stronę główną, zamiast widzieć stronę archiwum autora z nazwą użytkownika w URL.
  • Test REST API: Otwórz https://twojawitryna.pl/wp-json/wp/v2/users w przeglądarce bez logowania. Powinieneś zobaczyć błąd 404 lub pustą odpowiedź, a nie listę użytkowników z ich nazwami.
  • Test strony logowania: Spróbuj zalogować się z nazwą użytkownika, która nie istnieje, a następnie spróbuj z prawdziwą nazwą użytkownika, ale złym hasłem. Oba powinny dać ten sam komunikat błędu.
  • Skanowanie InspectWP: Uruchom nowe skanowanie InspectWP swojej witryny. Sekcja bezpieczeństwa sprawdza pod kątem podatności na enumerację użytkowników i wskaże, czy Twoje zabezpieczenia działają poprawnie.

Dodatkowe wskazówki dotyczące hardeningu

Zapobieganie enumeracji użytkowników działa najlepiej jako część szerszej strategii bezpieczeństwa. Rozważ te dodatkowe środki:

  • Unikaj "admin" jako nazwy użytkownika: Jeśli Twoje konto administratora nadal nazywa się "admin", utwórz nowe konto administratora z unikalną nazwą użytkownika, przypisz mu całą treść, a następnie usuń stare konto "admin".
  • Używaj silnych, unikalnych haseł: Nawet jeśli atakujący odkryje nazwę użytkownika, silne hasło sprawia, że ataki brute-force są niepraktyczne. Użyj menedżera haseł do generowania i przechowywania złożonych haseł.
  • Włącz uwierzytelnianie dwuskładnikowe: 2FA dodaje drugą warstwę ochrony. Nawet jeśli zarówno nazwa użytkownika, jak i hasło są skompromitowane, atakujący nadal nie może się zalogować bez drugiego czynnika.
  • Ogranicz próby logowania: Wtyczki takie jak Limit Login Attempts Reloaded lub Loginizer mogą blokować adresy IP po określonej liczbie nieudanych prób logowania.

Sprawdź teraz swoją stronę WordPress

InspectWP analizuje Twoją stronę WordPress pod kątem bezpieczeństwa, problemów SEO, zgodności z RODO i wydajności — za darmo.

Przeanalizuj stronę za darmo