GETPAID20.PL

4

Co nowego?

WordPress: Jak wyłączyć anonimowy dostęp do REST API oraz zablokować enumerację użytkowników

Doświadczeni mentorzy, aktywna społeczność i ponad 152 poradniki w jednym miejscu!

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.

 

info_img

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:

  1. Wtyczki -> Zainstalowane wtyczki -> My Cystom Functions -> Settings
  2. 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

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: https://www.youtube.com/embed/aEw-SAK-PfI



Pozdrawiam
Harry

Komentarze (4)

  1. Michał

    Niby człowiek wiedział, a jednak się nie zabezpieczał. Dzięki za ten wpis, moje wszystkie stronki na WP już zedytowane!

    Odpowiedz
    1. Harry (Get Paid 2.0)

      Cześć Michał!

      Bardzo dobra wiadomość 🙂

      Pozdrawiam

      Odpowiedz
  2. Doro

    Czy popularna wtyczka “Contact Form 7” nie korzysta z REST API? Gdzieś spotkałem taką informację.
    Wyłączenie REST API wyłączy też jeśli się nie mylę Gutenberga. Przynajmniej na CPT gdy wyłączam to jest on również dezaktywowany…

    Odpowiedz
    1. Harry (Get Paid 2.0)

      Contact Form 7 od wersji 4.8 korzysta z REST API by obsługiwać technologię AJAX czyli ładowanie dynamiczne bez przeładowania strony. Co do gutenberga – jest całkowicie obsługiwany przez REST API i wyłączenie tej funkcjonalności powoduje, że gutenberg z automatu przestanie działać, ponieważ korzysta z wp_update_post() do tworzenia i aktualizowania postów.
      Niestety ale czasem ciężko wybrać między wygodną, funkcjonalnością i bezpieczeństwem strony, dlatego ostatecznie należy rozważyć wszystkie pozytywy i negatywy lub przetestować, a następnie wyciągnąć wnioski

      Odpowiedz

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *