WordPress: Jak wyłączyć anonimowy dostęp do REST API oraz zablokować enumerację użytkownik
Każda nowa wersja systemu zarządzania treścią (CMS) WordPress wprowadza udoskonalenia platformy pod względem bezpieczeństwa przechowywania oraz dostępu do wrażliwych danych użytkowników. Funkcja Rest API została dodana w wersji 4.7 wordpress’a i jest przydatnym narzędziem dla programistów. Niestety przy okazji, całkiem anonimowo, umożliwia osobom z zewnątrz sprawdzenie ID (numer identyfikacyjny) użytkowników oraz każdego zarejestrowanego loginu, a nawet sumy kontrolnej gravatarów! Osoby niepożądane mogą wyświetlić także posty, strony czy media osadzone wewnątrz systemu. By poznać te wartości, wystarczy w pasku adresu dopisać ściężkę dostępową, np. getpaid20.pl/wp-json/wp/v2/users (tutaj jest zablokowane oczywiście – ale przejrzyjcie inne strony na WP, zwłaszcza starsze:)).
W tym wpisie przedstawiam jak pozbyć się tej luki, czyli jak wyłączyć anonimowy dostęp do REST API oraz zablokować enumerację użytkowników. Nie jestem fanem wtyczek-zapychaczy, w takim razie jeżeli mogę zrobić coś z pominięciem pluginu – robię to. Tak też zrobiłem w tym przypadku. Zapraszam do lektury i zachęcam do wdrożenia tych zabezpieczeń na swoich stronach.
Wyłączamy anonimowy dostęp do REST API – wordpress
UWAGA: Jeżeli potrzebujesz włączone API, to oczywiście tego nie rób, nie wyłączaj. Jeśli jednak nie miałeś/aś nawet pojęcia co to jest – najlepiej wyłączyć. Zdecydowana większość osób nie używa REST API i w celu zabezpieczenia swojego wordpress’a, zalecam wyłączenie.
W tym celu:
-
Instalujemy wtyczkę My Custom Functions
- Plugin: My Custom Functions
- Opis: Łatwe i bezpieczne dodawanie niestandardowego kodu PHP bez ingerencji w plik functions.php
- Link: https://wordpress.org/plugins/my-custom-functions
- Moja opinia: MUST HAVE! Mam ten plugin na absolutnie każdej swojej stronie!
Są dwie możliwości dostania się od ustawień wtyczki gdzie wprowadzisz zmiany:
- Wtyczki -> Zainstalowane wtyczki -> My Cystom Functions -> Settings
- Ustawienia -> PHP Inserter
Obojętnie którą z wyżej wymienionych możliwości wybierzemy, w zakładce “Main” wklejamy kod:
add_filter( ‘rest_endpoints’, ‘__return_empty_array’ );
Po wklejeniu powyższego kodu:
- Po prawej stronie zmieniamy przełącznik na wartość “ON” (tylko wtedy zmiany będą działały!)
- Zapisujemy zmiany (Save changes)
Jeśli wszystko zrobiłeś/aś tak jak należy, po przejściu pod adres wp-json/wp/v2/users powinna pokazać się taka informacja:
Blokowanie enumeracji użytkowników
WordPress jest wyposażony w tzw. funkcję enumeracji. To znaczy, że każdy użytkownik w bazie danych ma przypisany numer identyfikacyjny – ID. Domyślnie od 1 (admin) do ∞ (nieskończoność). W takim razie nawet jeśli REST API będzie wyłączone i z jego pomocą nie da rady ustalić listy zarejestrowanych użytkowników, osoby niepożądane mogą użyć skryptu, który po kolei będzie wpisywał kolejne numery do paska adresu (/?author=x, gdzie ‘x‘ to cyferka) – i w ten sposób znajdzie loginy użytkowników na naszej stronie. Dlatego zalecam również zablokowanie enumeracji użytkowników.
W tym celu logujemy się na swój serwer FTP i edytujemy plik .htaccess, który znajduje się w głównym folderze strony (tam gdzie index.php). W tym pliku, bezpośrednio nad </IfModule>, wklejamy poniższy kod:
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* https://ADRES-TWOJEJ-STRONY.PL/? [L,R=302]
ADRES-TWOJEJ-STRONY.PL – w tym miejscu wpisujemy domenę swojej strony! Cały kod .htaccess powinien wyglądać następująco:
# BEGIN WordPress
RewriteEngine On
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* https://ADRES-TWOJEJ-STRONY.PL/? [L,R=302]# END WordPress
Od tej pory gdy ktoś z zewnątrz będzie chciał ustalić loginy zarejestrowanych użytkowników, zostanie automatycznie przekierowany na stronę główną. Dokładniej rzecz biorąc, zostanie przekierowany tam gdzie wskażemy – zamiast https://ADRES-TWOJEJ-STRONY.PL/ można ustawić inny adres do przekierowania. Dowolny 😉
Do edycji .htaccess mogę też polecić wtyczkę Htaccess File Editor – Safely Edit Htaccess File (https://wordpress.org/plugins/wp-htaccess-editor)
- Testowanie poprawności przed zapisaniem
- Automatyczne kopie
- Możliwość wgrania backupu (z poziomu pluginu lub FTP)
- Wspiera sieć stron WordPress (tzw. WordPress Multisite)
Podsumowanie
Wyłączone REST API oraz zablokowana enumeracja użytkowników skutkuje zwiększeniem bezpieczeństwa swojego wordpress’a. Oczywiście należy też pamiętać o zmianie loginu administratora. Nie można sobie pozwolić na taki rarytas jak login “admin” lub “administrator”, ponieważ to również jest proszenie się o próbę włamania do panelu administracyjnego. Zabezpieczeń wordpress’a jest bardzo dużo i warto się tym interesować. To najpopularniejszy CMS, a więc i najpopularniejszy kąsek dla internetowych przestępców. Więcej o zabezpieczaniu wordpress’a dowiecie się także z mojego podcastu dla Mylead:
Pozdrawiam
Harry
0 komentarzy
Rekomendowane komentarze
Brak komentarzy do wyświetlenia
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się