Hushfort

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

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

    Publiczna lista użytkowników REST pod adresem yoursite.com/wp-json/wp/v2/users ze slugiem demo-admin
  2. 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.

    yoursite.com/?author=1 przekierowany na yoursite.com/author/demo-admin/, stronę autora zatytułowaną Author: demo-admin
  3. 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.

    Ustawienia Redukcji powierzchni ataku: lista użytkowników REST zablokowana dla niezalogowanych, skanowanie autorów zablokowane, lista autorów w mapie witryny i dane autora w oEmbed usunięte
  4. 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.

    Ten sam adres listy użytkowników REST odpowiada teraz rest_no_route ze statusem 404

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:

  1. REST API — /wp-json/wp/v2/users wyświetla autorów z ich slugiem, który zwykle jest równy loginowi.
  2. Skanowanie autorów — /?author=1 przekierowuje na /author/login-name/.
  3. Archiwa autorów — sam adres archiwum zawiera slug autora.
  4. Mapa witryny z rdzenia — /wp-sitemap-users-1.xml zawiera 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/users bez 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/users dla 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?

To zbieranie loginów witryny z publicznych adresów, takich jak ?author=1 czy lista użytkowników REST. Znając nazwy, atakujący muszą już tylko zgadywać hasła.

Czy widoczna nazwa użytkownika to zagrożenie?

Sama w sobie nie, ale odbiera połowę zgadywania. Ukrycie nazw to drobny krok wzmacniający; główną pracę wykonują silne hasła, limity logowania i uwierzytelnianie dwuskładnikowe.

Czy zablokowanie listy użytkowników REST zepsuje edytor?

Nie. Zalogowani użytkownicy są wyłączeni z blokady, więc edytor blokowy i ekrany panelu działają normalnie. Ma to znaczenie tylko wtedy, gdy zewnętrzna integracja odczytuje listę użytkowników bez logowania.

Czy mogę zachować strony archiwów autorów?

Tak. Możesz blokować skanowanie numerów ?author=, a archiwa /author/nazwa/ będą działać dalej. Aby całkowicie ukryć nazwy, nadaj autorom nazwę wyświetlaną i slug autora różne od loginu.

Dlaczego komunikaty błędów logowania mają znaczenie?

Domyślnie WordPress mówi, czy błędna była nazwa użytkownika, czy hasło. To potwierdza, które nazwy istnieją. Identyczne komunikaty w obu przypadkach usuwają tę wskazówkę.

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