Odezwał się do mnie jeden z klientów, że „gdzieś tam przeczytał”, że w raz w WordPressem 4.7 pojawiła się nowa możliwość odczytywania nazw użytkowników z zewnątrz, czyli np. przez różnej maści (SPAM)boty.
Trochę prawdy w tym jest, ale od razu mogłem też uspokoić mojego rozmówcę – wszystko jest pod kontrolą…
Spis treści w artykule
WordPress 4.7, Rest API i nowe endpoiny
Wraz z WordPressem 4.7 pojawiły się nowe endpointy (nie wiem jakie będzie dobry polski odpowiednik tej nazwy), a wśród nich ten odpowiedzialny za pobranie nazw użytkowników, wraz z kodami (sumami kontrolnymi) gravatarów, i to przez każdego zainteresowanego, bez potrzeby logowania czy jakiejkolwiek innej autoryzacji.
Wystarczy w pasku adresu wpisać adres wg schematu:
[ADRES_STRONY]/wp-json/wp/v2/users
Np.:
https://webinsider.pl/wp-json/wp/v2/users
W odpowiedzi uzyskamy coś w stylu:
[{"id":X,"name":"Patryk","url":"\/\/webinsider.pl","description":"","link":"https:\/\/webinsider.pl\/author\/patryk\/","slug":"patryk","avatar_urls":{"XY":"https:\/\/secure.gravatar.com\/avatar\/1234567890?s=XY&r=g","48":"https:\/\/secure.gravatar.com\/avatar\/1234567890?s=XY&r=g","96":"https:\/\/secure.gravatar.com\/avatar\/1234567890?s=96&r=g"},"meta":[],"_links":{"self":[{"href":"https:\/\/webinsider.pl\/wp-json\/wp\/v2\/users\/X"}],"collection":[{"href":"https:\/\/webinsider.pl\/wp-json\/wp\/v2\/users"}]}}]
Jak widać mamy tu nazwę wyświetlaną użytkownika, oraz jego ID. Na szczęście nie ma nazwy użytkownika, no chyba, że ktoś w obu przypadkach używa takiej samej nazwy. Ogólnie nie ma tu raczej danych, których nie dałoby się uzyskać w inny sposób, i zarazem takich, które narażałyby nas na jakieś (dodatkowe) niebezpieczeństwo…
Blokowanie
Ale jeśli ktoś z Was chciałby zablokować tego typu zapytania, to możecie w tym celu skorzystać np. z wtyczki Wordfence, gdzie w najnowszej wersji (6.2.8+) w standardzie pojawiła się również i blokada tego zapytania:
Prevent discovery of usernames through '/?author=N’ scans, the oEmbed API, and the WordPress REST API
W takim przypadku odpowiedź WordPressa będzie wyglądać np. tak:
{"code":"rest_user_cannot_view","message":"Przepraszamy, nie posiadasz uprawnienia do przegl\u0105dania u\u017cytkownik\u00f3w.","data":{"status":401}}
Można też dodać jedna linijkę kodu do pliku functions.php:
add_filter( 'rest_endpoints', '__return_empty_array' );
W takim przypadku odpowiedź WordPressa będzie wyglądać np. tak:
{"code":"rest_no_route","message":"Nie znaleziono \u017cadnej scie\u017cki pasuj\u0105cej do adresu URL oraz zapytania HTTP","data":{"status":404}}
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01
Heh, nowa dziura od twórców WP :)
Raczej to kolejny krok by WP jako CMSa otworzyć na zewnętrzne narzędzia, co jest dobrym kierunkiem. Opisany „problem” to raczej dla przewrażliwionych, bo na szczęście nie ma tam nazw użytkownika używanych do logowania (loginów), a tylko nazwy wyświetlane, które i tak są publicznie dostępne…