WordPress jak każdy popularny system narażony jest na ataki. Część ataków opiera się na lukach czy to w samym WordPressie (relatywnie rzadko), część we wtyczkach i motywach, w których znaleziono jakąś podatność. Ale pewnie największa część ataków – nie licząc SPAMu w komentarzach, który zapewne dominuje – dotyczy bezpośredniego logowania do panelu zarządzania stroną, po uprzednim odkryciu loginu i hasła, co często nie jest specjalnie trudno (admin:admin ;-)).
WordPress i enumeracja nazw użytkowników
Jeszcze do niedawna każdy nowy WordPress miał użytkownika „admin”, który był tworzony automatycznie podczas wstępnej konfiguracji strony, i którego nazwy „zwykłymi metodami” nie dało się zmienić. Oczywiście można (było) np. stworzyć nowego użytkownika i skasować „admina”, ale nie każdy wie, że taką operację warto wykonać.
Od jakiegoś czasu jest inaczej, bo już podczas wstępnej konfiguracji WordPressa podajemy również nazwę użytkownika:
Oczywiście nikt nikomu nie zabroni wpisać tam „admin”, ale – z tego co widzę choćby po stronach, które trafiają pod moją opiekę – nie jest to raczej specjalnie popularne.
Wybranie innej nazwy użytkownika jednak tylko pozornie rozwiązuje problem, bo bardzo często użytkownicy zostawiają jako nazwę wyświetlaną (np. autor strony lub artykułu) nazwę użytkownika. Zdecydowanie warto dokonać zmiany, tak by nazwa wyświetlana („przedstawiaj mnie jaki”) była inna, niż nazwa użytkownika:
Ale to nadal nie zamyka sprawy, bo nic nie stoi na przeszkodzie by za pomocą odpowiedniego linku ustalić jakie nazwy użytkowników (loginy) występują w WordPressie:
https://webinsider.pl/?author=1
https://webinsider.pl/?author=2
https://webinsider.pl/?author=3
...
https://webinsider.pl/?author=n+1
Każde takie zapytanie – w standardowej konfiguracji WordPressa – przeniesie na stronę, która w adresie (URL) będzie zawierała nazwę użytkownika:
https://webinsider.pl/author/[nazwa-użytkownika]/
W internecie jest sporo skryptów (PHP) oraz wtyczek pozwalających zablokować taką enumerację, ale nie dość, że jest to rozwiązanie, które przy złym wdrożeniu może narobić problemów, to jeszcze nie zawsze skuteczne, bo jest jeszcze choćby REST API. Do tego w wielu motywach link przypisany do nazwy autora również potrafi zdradzić nazwę użytkownika.
Ja osobiście preferuję zmianę pseudonimu. Niestety, zmiana pseudonimu w ustawieniach profilu użytkownika nie wystarczy, bo w bazie danych nie zmienia to zawartości pola, które nas interesuje. A wydawałoby się, że powinna…
Edycję bazy danych można przeprowadzić na wiele sposobów, choćby za pomocą phpMyAdmin, który dostępny jest w większości usług hostingu współdzielonego, czyli chyba najpopularniejszej formy hostowania swojej strony, zwłaszcza przez mniej zaawansowanych użytkowników (są nawet skrypty, które potrafią zautomatyzować proces instalacji WordPressa).
Po zalogowaniu się do phpMyAdmin wybieramy bazę danych z której korzysta WordPress (można ew. to sprawdzić w pliku wp-config.php) i przechodzimy do tabeli „wp_users”, z której następnie wybieramy użytkownika, którego chcemy zmodyfikować (opcja: edytuj):
Można tu też od razu dokonać zmiany nazwy użytkownika (z panelu zarządzania normalnie się nie da). Nas jednak w tym przypadku bardziej interesuje pole oznaczone „user_nickname”, z którego wartość jest pobierana do adresu URL przypisanego do użytkownika. Cel jest jeden – wartość w tym polu powinna być inna, niż w polu „user_login” (nazwa użytkownika wykorzystywana do logowania).
Możecie też skorzystać z polecenia SQL, które wystarczy wykonać na wybranej bazie:
UPDATE `wp_users` SET `user_nicename` = 'patryk' WHERE `wp_users`.`ID` = 1;
Choć wymaga to już znajomości ID użytkownika, bo gdy mamy więcej niż jednego, to nie będzie to 1…
Moim zdaniem jest to dużo lepsze rozwiązanie niż blokada enumeracji, choć oczywiście nic nie stoi na przeszkodzie, by połączyć te dwie metody.
- 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
Czy dobrze zrozumiałeś, że zmienisz numer admina (1) na jakiś inny?
Numer (ID) możesz zmienić, choć warto to zrobić jak najszybciej, zanim użytkownik coś zacznie tworzyć. Nie, ja zmieniam w bazie zawartość pola „nickname”, by była inna niż zawartość pola „login”, dzięki czemu ujawnienie pseudonimu (nickname) nie ujawnia faktycznego login.
Czyli w efekcie masz url https://webinsider.pl/author/patryk gdy login to webinsider ??
Tak, co zresztą widać, gdy najedziesz choćby na link z imieniem autora przy wpisach, których jestem autorem – link prowadzi do „patyka”, choć Patryk nie jest moim loginem. Na wszelki wypadek informuje, że „webinsider” to również nie jest mój login… ;-)