Witaj gościu! Zaloguj się lub Zarejestruj aby móc korzystać ze wszystkich funkcjonalności jakie oferuje to forum! Rozpocznij zarabianie przez internet, poznaj korzysci pracy w domu! Rejestracja i korzystanie z forum jest całkowicie darmowe!
Praca w domu - Dodatkowa Praca - Zarabianie przez Internet
Poradnik
Wyłączenie dostępu do REST API i blokowanie enumeracji - zabezpieczenie WordPress - Wersja do druku


+- Praca w domu - Dodatkowa Praca - Zarabianie przez Internet (https://zarabiam.com)
+-- Dział: Zarządzanie stronami Internetowymi (/Forum-Zarzadzanie-stronami-Internetowymi-358)
+--- Dział: Wordpress (/Forum-Wordpress-360)
+--- Wątek:
Poradnik
Wyłączenie dostępu do REST API i blokowanie enumeracji - zabezpieczenie WordPress (/Temat-Wylaczenie-dostepu-do-REST-API-i-blokowanie-enumeracji-zabezpieczenie-WordPress-170319)

Strony: 1 2


Wyłączenie dostępu do REST API i blokowanie enumeracji - zabezpieczenie WordPress - Harry. - 07-01-2021 09:25

Cześć wszystkim!

Szukałem ale nie znalazłem podobnego tematu więc przedstawiam wam krótki acz treściwy poradnik dotyczący wyłączenia anonimowego dostępu do REST API. Funkcja ta została dodana w wersji 4.7 wordpressa, a na dzień pisania tego poradnika aktualna to 5.6.

Oczywiście, to jest jedna z wielu metod na zabezpieczenie WP. Akurat ta jest bardzo często wykorzystywana przez spamerów, hackerów, backdoory i inny syf. Z resztą polecam zapoznać się z obrazkiem, który wiele powinien wyjaśnić.
[Obrazek: rest-api.jpg]

Jak widzisz REST API to potężne narzędzie dla programistów, ale też umożliwia ataki. Dopisując do adresu odpowiednie wartości ujawnić można ciekawe rzeczy, np. zarejestrowanych wszystkich użytkowników, posty, strony czy media. By poznać zarejestrowanych użytkowników wystarczy dopisać /wp-json/wp/v2/users

Spostrzegawcza osoba zwróci uwagę, że nie istnieje folder /wp-json/, a jedynie:
  • cgi-bin (opcjonalnie)
  • wp-admin
  • wp-content
  • wp-includes
MAGIA!

Za przykład niech posłuży mi strona znaleziona w dziale Off-Topic / Wasza Twórczość / Poznajmy zatem zarejestrowanego użytkownika przechodząc pod adres http://msx96.pl/wp-json/wp/v2/users
    Zarejestrowany user to alg43215
Znając nazwę użytkownika już prosta droga, żeby łamać hasło, np. metodą brute force.


Dopiero później znalazłem dział Strony Partnerskie, więc obieram za cel stronę znajdującą się tutaj, która nie ma wyłączonego REST API. Zarejestrowany user: admin - typowe faux pas facepalm ponieważ nazwa konta to "admin". Wszystko będzie lepsze niż najzwyklejszy admin, brakuje jeszcze hasła "qwerty".
Login do zmiany jak najszybciej!

Myślę, że te 2 przykłady wystarczą w zupełności. Żeby wyłączyć REST API, z którego zapewne nie korzystasz. Poczyń następujące kroki:

Zainstaluj sobie wtyczkę My Custom Functions Masz jedną z dwóch możliwości dostania się od ustawień wtyczki gdzie wprowadzisz zmiany:
  1. Wtyczki -> Zainstalowane wtyczki -> My Cystom Functions -> Settings
  2. Ustawienia -> PHP Inserter

Następnie:
  • W zakładce "Main" wklejasz kod
    Kod:
    add_filter( 'rest_endpoints', '__return_empty_array' );
  • Po prawej stronie zmieniasz na "ON"
  • Zapisujesz zmiany (Save changes)
Jeśli wszystko zrobiłeś tak jak należy, to po przejściu pod adres-twojej-strony.pl/wp-json/wp/v2/users powinna pokazać się informacja jak na poniższym obrazku

[Obrazek: wy-aczone-rest-api.jpg]


Dodatkowo wordpress ma coś takiego jak enumeracja. Każdy użytkownik w bazie danych ma przypisany numer identyfikacyjny – ID. Domyślnie od 1 (admin) do ∞ (nieskończoność).

Wystarczy aby zainteresowany użył skryptu automatyzującego, który będzie wpisywał po adresie /?author=x
Gdzie 'x' to cyferka, np. /?author=1

Dla przykładu wezmę jeszcze stronę użytkownika @[HYIPRoulette] Jak sobie z tym poradzić?
Wystarczy edytować plik .htaccess, skopiować poniższy kod i wkleić bezpośrednio nad </IfModule>

Kod:
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* https://ADRES-TWOJEJ-STRONY.PL/? [L,R=302]

Od tej pory gdy ktoś będzie chciał poznać ID zostanie automatycznie przekierowany na stronę główną. Zamiast https://ADRES-TWOJEJ-STRONY.PL/ można ustawić inny adres, np. jakiś "screamer link" Wink

Do edycji .htaccess mogę 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 pluginy lub FTP)
  • Wspiera sieć stron Wordpress (WordPress Multisite)

Innym sposobem, którego w sumie nie polecam (wrzucam informację jako ciekawostkę) jest zmiana ID w bazie danych, np ID=1000, to następne konto będzie miało ID=1001 i tak dalej Wink

Reasumując: wyłączona enumeracja użytkowników oraz REST API skutkuje zwiększeniem bezpieczeństwa.


Zobacz też inny poradnik z tematyki bezpieczeństwa:


Jeżeli są pytania, to proszę zadawać. Postaram się odpowiedzieć na wszystkie.

Pozdrawiam

Reklama


...

ZYSKAJ DOSTĘP DO STALE ROZWIJANYCH PORADNIKÓW


PRYWATNOŚĆ - OFFSHORE - PŁATNOŚCI - ZABEZPIECZENIA - DARKNET


[Obrazek: welcome3.png]



RE: Wyłączenie anonimowego dostępu do REST API - Cherri - 07-01-2021 16:33

Jest jeszcze jakiś sposób by jeszcze jakoś namierzyć użytkownika?


RE: Wyłączenie anonimowego dostępu do REST API - rachman - 07-01-2021 18:19

Wchodząc w posty masz zazwyczaj autora Wink Tak najprościej.
Można też na chybił trafił wpisując adres:
https://adres-wordpress/author/<login_użytkownika>

Tutaj masz przykład jak to zrobić po id usera - gdy nie znamy żadnej nazwy:
https://sekurak.pl/jak-zabezpieczyc-wordpress-poradnik-krok-po-kroku/


RE: Wyłączenie anonimowego dostępu do REST API - Harry. - 07-01-2021 22:27

Cześć @[xsajdq] w sumie jest jeszcze jedna opcja by poznać nazwę użytkownika.
Wordpress ma coś takiego jak enumeracja. Każdy użytkownik w bazie danych ma przypisany numer identyfikacyjny – ID. Domyślnie od 1 (admin) do ∞ (nieskończoność).

Wystarczy aby zainteresowany użył skryptu automatyzującego, który będzie wpisywał po adresie /?author=x
Gdzie 'x' to cyferka, np. /?author=1

Dla przykładu wezmę jeszcze stronę użytkownika @[HYIPRoulette]
Jak sobie z tym poradzić?
Wystarczy edytować plik .htaccess, skopiować poniższy kod i wkleić bezpośrednio nad </IfModule>

Kod:
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* https://ADRES-TWOJEJ-STRONY.PL/? [L,R=302]

Od tej pory gdy ktoś będzie chciał poznać ID zostanie automatycznie przekierowany na stronę główną. Zamiast https://ADRES-TWOJEJ-STRONY.PL/ można ustawić inny adres, np. jakiś "screamer link" Wink

Innym sposobem, którego w sumie nie polecam (wrzucam informację jako ciekawostkę) jest zmiana ID w bazie danych, np ID=1000, to następne konto będzie miało ID=1001 i tak dalej Wink

Reasumując: wyłączona enumeracja użytkowników oraz REST API skutkuje zwiększeniem bezpieczeństwa.

Temat wyżej zaktualizowałem o treści z tego posta.

Zapraszam do zadawania pytań Wink
Pozdrawiam serdecznie


RE: Wyłączenie dostępu do REST API oraz blokowanie enumeracji - zabezpieczenie WordPress - rachman - 08-01-2021 05:07

Dlaczemu Wink nie polecasz zmiany ID?
Zawsze to robię. 15 sekund w bazie na czystej instalce i wszystko gra. Nie znam żadnych znaczących przeciwskazań, a zawsze to jakieś dodatkowe zabezpieczenie. Znasz jakieś, czy uważasz, że strata czasu po prostu?


RE: Wyłączenie dostępu do REST API i blokowanie enumeracji - zabezpieczenie WordPress - Harry. - 08-01-2021 08:50

Cześć @[rachman]
Faktycznie zmiana ID jest szybka i w pewnym sensie zwiększa bezpieczeństwo, bo jak pisałem wyżej. Enumeracja użytkowników zaczyna się od ID=1 w takim razie wystarczy mały skrypt automatyzujący, który będzie sprawdzał do określonej wartości (np. do ID=1000) lub w nieskończoność tak długo aż nie uzyska 404 Wink Później wystarczy jedynie zgadywać hasło do kokpitu najprostszą metodą czyli bruteforce.

Jeżeli nie przekonałem cię do mojego zabezpieczenia z wyłączeniem enumeracji, to mogę jeszcze poradzić zmianę adresu logowania. Profilaktycznie żeby utrudnić robotę "hakierom" Big Grin Fajną wtyczką do tego jest Webcraftic Hide Login Page. Możesz ustawić przekierowanie z /wp-admin/
- na stronę błędu 404
- na stronę z zabronionym dostępem - Błąd 403 (Forbidden)
- albo moja ulubiona opcja przekierowanie na stronę główną Big Grin

Pozdrawiam


RE: Wyłączenie dostępu do REST API oraz blokowanie enumeracji - zabezpieczenie WordPress - rachman - 08-01-2021 13:11

Nie no sposób podajesz ok, w sumie to też mam go w skrawkach kodu "do wdrożenia" Wink dobrze że przypomniałeś. Nie mam tego w notkach z wdrażaniem "na już" ze względu na:
- plik ten jest w pewnych przypadkach nadpisywany
- ewentualny przypadek spotkania ngix Wink gdzie występuje inny mechanizm niz htaccess

Dlatego wdrażam najpierw takie "twardsze, niezmienialne" zmiany, a htaccess traktuję jako drugi krok - bo można zapomnieć po sprawdzić czy wprowadzone zmiany nie "znikły" Smile Ale tak sposób który wspominasz mam do wdrożenia też bo właśnie stawiam znajomemu i zabezpieczam wordpressa.

Wtyczek staram się nie używać jak nie ma musu. Wiele opcji z poziomu wtyczek to z leksza pic na wodę jak chodzi o bezpieczeństwo, chociaż w tym przypadku pewnie też wtyczką coś zrobię.


RE: Wyłączenie dostępu do REST API i blokowanie enumeracji - zabezpieczenie WordPress - Harry. - 09-01-2021 10:28

Jak długo stawiam strony, tak nigdy nie miałem problemu z nadpisywaniem się .htaccess. Być może masz źle ustawione CHMOD.
Plik .htaccess powinien mieć CHMOD 644, polecam fajną stronę pokazującą jakie będą uprawnienia. W tym konkretnym przypadku jest 644 -> http://www.chmod.pl/chmod-644.html
.htaccess jest plikiem konfiguracyjnym serwera Apache, a serwery Nginx korzystają z innego (nginx.conf) dlatego nie są kompatybilne. W necie można znaleźć specjalne konwertery .htaccess -> nginx, np. https://winginx.com/en/htaccess

Jak miałbym polecić wtyczkę do edycji .htaccess, to będzie 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 pluginy lub FTP)
  • Wspiera sieć stron Wordpress (WordPress Multisite)
Popieram zdanie z wtyczkami do bezpieczeństwa. Właśnie te wtyczki, które mają dawać bezpieczeństwo mają więcej dziur, dlatego omijam szerokim łukiem te wtyczki. Akurat wczoraj wieczorem zgłosił się do mnie użytkownik na innym forum, bo ma problem z pozostałościami po usuniętej wtyczce Wordfence - ponad 20 tysięcy zaindeksowanych linków. Dziś pomagam mu to usunąć.

Poradnik zaktualizowałem o treści z tego posta.

Pozdrawiam


RE: Wyłączenie dostępu do REST API i blokowanie enumeracji - zabezpieczenie WordPress - rachman - 09-01-2021 15:40

W sensie gdzieś czytałem (wiele razy spotkałem to stwierdzenie), ale nie sprawdzałem, że zapisanie linków stałych i aktualizacje generują nowy htaccess.

Wiesz, Wordpressa unikałem całe życie Wink Duży skrypt w którym by osiągnąć podstawowe zabezpieczenia lub elementy pod SEO trzeba grzebania, kodowania albo wtyczek... Jak na zabezpieczaniu się znam to sam skrypt - nie wszystkie tajemnice zdążyłem poznać/sprawdzić czy są prawdziwe.
Widziałem informacje, że wp-config.php nie jest nadpisywane podczas aktualizacji. Nie wiem jak z htaccess, a gdzieś na paru blogach pisano że zmiana linków w panelu tworzy nowy htaccess. Nie wgłębiałem się w szczegóły więc na wszelki wypadek - chociaż nie zdarzyło mi się nadpisanie - działam w pierwszej kolejności z tym co nie da się nadpisać, po tym htaccess i function w child template lub jako wtyczka i na końcu ewentualne wtyczki jak coś zbyt ciężkie do osiągnięcia "z palca" Wink

Skoro sytuacja taka, że i na WP musiałem wskoczyć to już notki robię na przyszłość z myślą o (prawie) każdej ewentualności. Staram się zachować w zmianach na ile się da niezależności od platformy itd. Kreatory do nginx nie wiem czy bardziej skomplikowane zapisy dają radę zmienić poprawnie i też tak zachowawczo staram się co się da w inny - jeśli nie przekombinowany sposób - osiągnąć Wink ale wiadomo nie wszystko się da.
Na swoich skryptach to lecę na htaccess bo wiem gdzie trzymam strony ale jak komuś robię to z myślą o jak największej mobilności Smile

No widać, że masz pojęcie o WP, fajnie że się tym dzielisz. Ja nawet zacząłem pisać poradnik o zabezpieczaniu www ale brak czasu... To co wymieniasz to konieczne podstawy o których nie każdy wie i aż szok że WP tego od lat nie ustawił tak by było to dla laików łatwo osiągalne. Każdy myśli że jego mała stronka nie zainteresuje hackerów Wink Też kiedyś myślałem podobnie. Do czasu aż włączyłem na swojej www (nie WP) powiadamianie o nieprawidłowych wywołaniach stron. Strona z palca pisana a setki co dzień czasami skanów strony pod kątem poszukiwań adresów typowych dla Wordpress. Boty. Od tamtej pory zająłem się konkretniej zabezpieczaniem bo aż mi kopara opadła że mało widoczna stronka jest tak filowana na luki...

Zaciekawiła mnie wtyczka wspomniana przez Ciebie - My Custom Functions. Ona dane do DB zapisuje pewnie? Raczej wolę swoją wtyczkę lub function w child ale przyjrzę się tylko ciekawi mnie gdzie ona kod zapisany wciska. Wiesz może? Na razie opis patrzyłem ale nie wychwyciłem tego. Wpina kod tak by nie dało się bez niego?
Jeśli dołożyliby funkcję w tej wtyczce wstawiania kodu na wybranych stronach i - tylko na www/ tylko w panelu admina to było by to już bardzo ciekawe narzędzie Smile Jak skończę z www znajomego może coś podobnego się zrobi, nie wiem czy dam radę ale taka wtyczka ułatwiłaby życie - chyba że znasz taką gotową?


RE: Wyłączenie dostępu do REST API i blokowanie enumeracji - zabezpieczenie WordPress - Harry. - 10-01-2021 21:05

Już rozumiem o co chodzi i spieszę z wytłumaczeniem. Gdy nie masz pliku .htaccess na serwerze, to można go łatwo wygenerować.
  1. Ustawienia
    Następnie wybierasz
  2. Bezpośrednie linki
    i na samym końcu oczywiście klikasz przycisk
  3. Zapisz zmiany

Wtedy wordpress generuje ci .htaccess, a w środku znajdziesz
Kod:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Nic nie nadpisuje, a przynajmniej u mnie nie było takiej sytuacji Smile Jedynie zapisuje / tworzy nowy plik.

(09-01-2021 15:40)rachman napisał(a):  To co wymieniasz to konieczne podstawy o których nie każdy wie i aż szok że WP tego od lat nie ustawił tak by było to dla laików łatwo osiągalne.
Jest o wiele więcej rzeczy, o które twórcy WP powinni zadbać jeśli chodzi o bezpieczeństwo. Bardzo dużo mógłbym tutaj wypisać. Fajnie, że ten CMS się rozwija i dodają nowe funkcjonalności lecz zapominają o ważnej rzeczy - bezpieczeństwie. Zdecydowana większość stron w internecie przecież stoi na wordpressie.

Szczerze polecam plugin My Custom Functions. Wszelkie zmiany w functions.php wprowadzasz bezpośrednio z kokpitu. W sumie nie wyobrażam sobie edycji functions.php bez tej wtyczki. Wszystkie dane zapisywane są w bazie danych MySQL, a dokładniej w tabeli wp_options. W moim przypadku na localhost wygląda to tak:
Kod:
a:3:{s:6:"enable";s:2:"on";s:8:"snippets";s:55:"add_filter( 'rest_endpoints', '__return_empty_array' );";s:15:"hidden_scrollto";s:1:"0";}

Niestety nie znam wtyczki, o którą pytasz ale chętnie przetestuję jeśli masz zamiar taką lub podobną stworzyć Smile

Pozdrawiam