Jak ukryć nazwy użytkowników i zatrzymać enumerację użytkowników w WordPressie?
Autor: Eureka Studio · Zaktualizowano
Krótka odpowiedź
WordPress pokazuje nazwy użytkowników w czterech publicznych miejscach: w endpoincie REST /wp-json/wp/v2/users, w przekierowaniach ?author=1, w adresach archiwów autorów i w mapie witryny z użytkownikami. Aby je ukryć, zablokuj listę REST dla niezalogowanych, zatrzymaj skanowanie ?author=, usuń mapę witryny z użytkownikami i ujednolić komunikaty błędów logowania. Wtyczka zrobi wszystkie cztery rzeczy; potem sprawdź każdą z nich.
Kroki
1Krok 1
Zobacz, co WordPress pokazuje dziś
Wejdź na yoursite.com/wp-json/wp/v2/users jako niezalogowany. W domyślnej instalacji dostaniesz listę JSON z loginem każdego autora w polu slug.
2Krok 2
Wypróbuj skanowanie autorów
Teraz wejdź na yoursite.com/?author=1. WordPress przekierowuje na /author/twoj-login/, pokazując nazwę w pasku adresu. Boty liczą 1, 2, 3, by zebrać wszystkich użytkowników.
3Krok 3
Zamknij cztery miejsca
Otwórz Hushfort → Redukcja powierzchni ataku i włącz moduł. Pozostaw włączone opcje Lista użytkowników REST, Skanowanie autorów („Blokuj skanowanie ?author=1”), Lista autorów w mapie witryny i Dane autora w oEmbed, a potem zapisz.
4Krok 4
Sprawdź ponownie w oknie prywatnym
Powtórz te same żądania jako niezalogowany. Lista użytkowników odpowiada teraz „rest_no_route” z kodem 404, a ?author=1 nie przekierowuje już na nazwę użytkownika.
Dlaczego to ważne
Aby się zalogować, atakujący potrzebuje dwóch rzeczy: nazwy użytkownika i hasła. WordPress od razu po instalacji oddaje pierwszą połowę. To nie błąd — każde z tych miejsc ma swój cel (dane dla aplikacji, ładne adresy autorów, wyszukiwarki). Razem jednak pozwalają dowolnemu botowi w kilka sekund zbudować listę wszystkich loginów w Twojej witrynie.
Ukrycie nazw użytkowników nie sprawi, że słabe hasło stanie się bezpieczne. Usuwa natomiast łatwą połowę łamigłówki, więc każda próba musi trafić zarówno w nazwę, jak i w hasło. W połączeniu z limitami logowania i uwierzytelnianiem dwuskładnikowym zgadywanie z powolnego staje się beznadziejne.
Cztery miejsca, w których WordPress publikuje nazwy użytkowników:
- REST API —
/wp-json/wp/v2/userswyświetla autorów z ich slugiem, który zwykle jest równy loginowi. - Skanowanie autorów —
/?author=1przekierowuje na/author/login-name/. - Archiwa autorów — sam adres archiwum zawiera slug autora.
- Mapa witryny z rdzenia —
/wp-sitemap-users-1.xmlzawiera adresy archiwów autorów. Odpowiedzi oEmbed też mogą zawierać dane autora.
Częste błędy
- Naprawienie jednego miejsca i uznanie sprawy za zamkniętą. Zamknięcie
?author=przy otwartej liście REST nic dla bota nie zmienia. Sprawdź wszystkie cztery. - Nazwa wyświetlana równa loginowi. Nawet po zamknięciu wszystkich wycieków motyw, który wyświetla „Opublikowane przez admin”, zdradza nazwę. Ustaw inną nazwę wyświetlaną w Użytkownicy → Profil (pole „Przedstawiaj mnie jako”).
- Psucie prawdziwych stron autorów. Na blogu z kilkoma autorami archiwa autorów są przydatne. Blokuj skanowanie numerów, a nie same archiwa.
- Szczegółowe błędy logowania. „Hasło podane dla nazwy użytkownika jane jest nieprawidłowe” potwierdza, że nazwa istnieje. Używaj jednego komunikatu dla obu przypadków.
Bez wtyczki
Większość tego możesz załatwić wtyczką obowiązkową (wp-content/mu-plugins/hide-users.php):
<?php
// 1. REST user list: logged-out visitors get nothing.
add_filter( 'rest_endpoints', function ( $endpoints ) {
if ( ! is_user_logged_in() ) {
unset( $endpoints['/wp/v2/users'], $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
}
return $endpoints;
} );
// 2. ?author=N scans: stop the redirect that reveals the name.
add_action( 'template_redirect', function () {
if ( isset( $_GET['author'] ) && ! is_admin() ) {
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
} );
// 3. Core sitemap: drop the users provider.
add_filter( 'wp_sitemaps_add_provider', function ( $provider, $name ) {
return 'users' === $name ? false : $provider;
}, 10, 2 );
// 4. Same message for wrong username and wrong password.
add_filter( 'login_errors', function () {
return 'The username or password is incorrect.';
} );
Zastrzeżenia: najpierw przetestuj to na witrynie testowej, bo motywy i wtyczki czasem odczytują listę użytkowników REST. Ten kod nie zmienia sluga autora w adresach archiwów; do tego zmień nicename każdego autora albo użyj wtyczki do nazw wyświetlanych. No i to kolejny plik, o którym trzeba pamiętać przy przenosinach lub przebudowie witryny.
Jeśli coś pójdzie nie tak
- Integracja straciła listę autorów. Niektóre zewnętrzne narzędzia odczytują
/wp/v2/usersbez logowania. Daj im hasło aplikacji, żeby się uwierzytelniały, albo ponownie odblokuj listę. - Strony autorów pokazują 404. Wybrano całkowite wyłączenie archiwów autorów. Przełącz na opcję, która blokuje tylko skanowanie numerów.
- Wtyczka SEO nadal pokazuje autorów. Wiele wtyczek SEO generuje własną mapę witryny autorów. Wyłącz mapy autorów także w tej wtyczce.
Z Hushfort
Osłona nazw użytkowników należy do Hushfort Pro. Skan powierzchni ataku, który pokazuje, co jeszcze wycieka, jest w Hushfort Security, darmowej wtyczce bezpieczeństwa WordPress.
Osłona nazw użytkowników, część warstwy Redukcja powierzchni ataku w Hushfort, zamyka wszystkie cztery miejsca na jednym ekranie:
- blokuje listę REST
/wp/v2/usersdla niezalogowanych odwiedzających, - blokuje skanowanie
?author=N, zachowując archiwa/author/name/(albo całkowicie wyłącza archiwa, jeśli wolisz), - usuwa mapę witryny z użytkownikami oraz dane autora z odpowiedzi oEmbed,
- ujednolica komunikaty błędów logowania dla błędnej nazwy użytkownika i błędnego hasła.
Następnie Skan powierzchni ataku sprawdza każde miejsce prawdziwymi żądaniami i wskazuje każdą nazwę użytkownika, która nadal wycieka.
Najczęstsze pytania
Czym jest enumeracja użytkowników w WordPressie?
Czy widoczna nazwa użytkownika to zagrożenie?
Czy zablokowanie listy użytkowników REST zepsuje edytor?
Czy mogę zachować strony archiwów autorów?
Dlaczego komunikaty błędów logowania mają znaczenie?
Powiązane poradniki
Jak sprawdzić, co ujawnia moja witryna WordPress?
Sprawdź swoją witrynę WordPress tak, jak robi to bot. Pięć żądań pokaże, czy logowanie, XML-RPC i nazwy użytkowników są otwarte, i jak to zamknąć.
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 ograniczyć liczbę prób logowania w WordPressie?
Ogranicz próby logowania w WordPressie i zatrzymaj ataki brute force: blokada IP po kilku nieudanych logowaniach, sprawdzone ustawienia i kod do wdrożenia.
Zobacz kroki



