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}}


- Notepad++ i wtyczka Linefilter3, czyli prosty sposób na filtrowanie treści, np. logów serwera, nie tylko na prośbę prokuratury ;-) - 1970-01-01
- Poważny danych wyciek z ALAB Laboratoria – do internetu trafiły nie tylko dane osobowe, ale też i dane medyczne, i choć już jest grubo, to ponoć tylko zapowiedź prawdziwego armagedonu - 1970-01-01
- Prosty sposób na bezpłatny dostęp do płatnych ikon Font Awesome, czyli krótkie testy przed ewentualnym zakupem - 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…