Poradnik naprawy

Jak wyłączyć WordPress REST API

8 lutego 2026

WordPress REST API to potężny interfejs, który pozwala zewnętrznym aplikacjom, motywom i wtyczkom komunikować się z danymi Twojej witryny. Domyślnie WordPress udostępnia kilka publicznych endpointów, które każdy może zapytać bez uwierzytelniania. Choć jest to przydatne dla konfiguracji headless i integracji stron trzecich, otwiera też drzwi do wycieków informacji, szczególnie wokół danych użytkowników.

Co WordPress REST API domyślnie udostępnia

Gdy REST API jest w pełni dostępne, kilka endpointów zwraca dane, które większość właścicieli witryn wolałaby utrzymać prywatne. Najczęściej nadużywane endpointy to:

  • /wp-json/wp/v2/users: zwraca listę wszystkich użytkowników, którzy opublikowali co najmniej jeden post, w tym nazwę użytkownika, nazwę wyświetlaną, ID użytkownika, URL avatara i link archiwum autora.
  • /wp-json/wp/v2/users/1: zwraca szczegółowe informacje o konkretnym użytkowniku według ID. Atakujący często zaczynają od ID 1, ponieważ to zwykle konto administratora.
  • /wp-json/wp/v2/posts: wymienia opublikowane posty wraz z informacjami o autorze.
  • /wp-json/wp/v2/pages: wymienia wszystkie opublikowane strony, co może ujawniać wewnętrzną strukturę witryny.
  • /wp-json/: sam endpoint root ujawnia wszystkie zarejestrowane trasy i daje atakującym mapę możliwości Twojej witryny i zainstalowanych wtyczek.

Endpoint /wp/v2/users jest dla większości witryn największą obawą. Atakujący używają go do wyliczania użytkowników, zbierając ważne nazwy użytkowników, których następnie używają w atakach brute-force na logowanie. Nawet jeśli używasz silnych haseł, ujawnianie nazw użytkowników usuwa jedną warstwę obrony.

Dlaczego nie powinieneś całkowicie wyłączać REST API

Może być kuszące, by całkowicie zablokować REST API, ale to zepsuje kilka podstawowych funkcji WordPressa. Edytor bloków Gutenberg mocno polega na wywołaniach REST API do ładowania danych bloków, zapisywania treści i zarządzania mediami. Jeśli całkowicie wyłączysz API, Gutenberg się nie załaduje i nie będziesz mógł edytować postów ani stron.

Poza Gutenbergiem wiele popularnych wtyczek polega na REST API dla swojej funkcjonalności:

  • Contact Form 7: w nowszych wersjach używa endpointów REST API do obsługi wysyłki formularzy.
  • WooCommerce: polega na trasach REST API dla operacji koszyka, przetwarzania checkout i interfejsu administracyjnego.
  • Yoast SEO: używa wywołań REST API dla swoich funkcji metabox i analizy treści w edytorze.
  • Jetpack: wymaga dostępu do REST API dla swojego połączenia z usługami WordPress.com.

Właściwe podejście to selektywne ograniczenie: zablokuj publiczny dostęp do wrażliwych endpointów i utrzymaj API dostępne dla uwierzytelnionych użytkowników i obszaru administracyjnego WordPress.

Ogranicz REST API tylko do zalogowanych użytkowników

Najskuteczniejszą metodą jest wymaganie uwierzytelnienia dla wszystkich żądań REST API. Dodaj ten kod do pliku functions.php swojego motywu lub, lepiej, do niestandardowej wtyczki specyficznej dla witryny:

add_filter('rest_authentication_errors', function($result) {
    // If a previous authentication check already passed or failed, respect it
    if (true === $result || is_wp_error($result)) {
        return $result;
    }

    // Block unauthenticated requests
    if (!is_user_logged_in()) {
        return new WP_Error(
            'rest_not_logged_in',
            'You are not currently logged in.',
            array('status' => 401)
        );
    }

    return $result;
});

To podejście blokuje cały dostęp do REST API dla odwiedzających, którzy nie są zalogowani. Gutenberg, WooCommerce i inne wtyczki nadal działają normalnie, ponieważ ich żądania pochodzą z uwierzytelnionych sesji administracyjnych. Odwiedzający próbujący osiągnąć /wp-json/wp/v2/users otrzymują błąd 401 zamiast danych użytkowników.

Pamiętaj: jeśli Twoja witryna używa frontendu headless lub ma publiczną funkcję pobierającą dane przez REST API (na przykład funkcja live-search działająca na REST API), ta metoda zepsuje tę funkcję. W takich przypadkach lepiej pasuje selektywne podejście poniżej.

Selektywnie wyłącz tylko endpoint users

Jeśli chcesz utrzymać REST API dostępne dla publicznego użytku, ale konkretnie zapobiec wyliczaniu użytkowników, możesz usunąć tylko endpointy użytkowników:

add_filter('rest_endpoints', function($endpoints) {
    // Remove the users list endpoint
    if (isset($endpoints['/wp/v2/users'])) {
        unset($endpoints['/wp/v2/users']);
    }
    // Remove the single user endpoint
    if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
        unset($endpoints['/wp/v2/users/(?P[\d]+)']);
    }
    return $endpoints;
});

To pozostawia wszystkie inne trasy REST API funkcjonalne, blokując konkretnie wektor ataku wyliczania użytkowników. To dobry kompromis dla witryn, które potrzebują publicznego dostępu do REST API do wyszukiwania, zapytań o treści lub innych funkcji, ale chcą chronić dane użytkowników.

Usuń link discovery REST API z HTML

WordPress dodaje tag <link rel="https://api.w.org/"> w head HTML i nagłówek Link w odpowiedziach HTTP. Mówią one zautomatyzowanym narzędziom, gdzie znaleźć REST API. Choć usunięcie tych tagów nie wyłącza faktycznie API (endpointy nadal odpowiadają pod swoimi zwykłymi URL-ami), zmniejsza wykrywalność:

// Remove the REST API link from the HTML head
remove_action('wp_head', 'rest_output_link_wp_head');

// Remove the REST API link from XML-RPC responses
remove_action('xmlrpc_rpc_methods', 'rest_output_link_wp_head');

// Remove the Link header from HTTP responses
remove_action('template_redirect', 'rest_output_link_header', 11);

Ten krok najlepiej działa w połączeniu z jedną z metod ograniczenia powyżej, nie samodzielnie. Samo usunięcie tagu linku bez ograniczenia faktycznych endpointów to bezpieczeństwo przez ukrycie, które zapewnia minimalną rzeczywistą ochronę.

Użyj wtyczki do zarządzania dostępem REST API

Jeśli wolisz nie dodawać niestandardowego kodu, kilka wtyczek oferuje interfejs użytkownika do zarządzania dostępem REST API:

  • Disable WP REST API: blokuje cały dostęp REST API dla nieuwierzytelnionych żądań prostym przełącznikiem. Po aktywacji nie jest potrzebna dalsza konfiguracja.
  • WP REST API Controller: daje szczegółową kontrolę, które endpointy są publiczne, a które wymagają uwierzytelnienia, więc możesz zezwalać na niektóre trasy i blokować inne.

Podejście wtyczkowe jest łatwiejsze w zarządzaniu, ale dodaje zależność. Jeśli wtyczka zostanie dezaktywowana lub usunięta podczas aktualizacji, Twoje REST API jest znowu w pełni publiczne. Podejście kodowe jest bardziej niezawodne dla długoterminowej ochrony.

Testowanie ograniczeń REST API

Po zastosowaniu zmian zweryfikuj, czy działają poprawnie. Otwórz okno przeglądarki w trybie incognito (abyś nie był zalogowany) i spróbuj osiągnąć te URL-e na swojej witrynie:

  • https://yoursite.com/wp-json/wp/v2/users
  • https://yoursite.com/wp-json/wp/v2/users/1
  • https://yoursite.com/wp-json/

Jeśli Twoje ograniczenie działa, te powinny zwracać błąd 401 lub pustą odpowiedź zamiast danych użytkowników. Następnie zaloguj się do obszaru administracyjnego WordPress i potwierdź, że edytor Gutenberg, Twoje formularze i jakiekolwiek funkcje WooCommerce nadal działają zgodnie z oczekiwaniami.

Zweryfikuj z InspectWP

Po wdrożeniu zmian wykonaj nowy skan InspectWP na swojej stronie. Sekcja bezpieczeństwa Twojego raportu pokazuje, czy REST API jest publicznie dostępne i czy endpoint users zwraca dane. Jeśli ograniczenie działa poprawnie, InspectWP raportuje API jako niedostępne lub endpoint user jako ograniczony.

Sprawdź teraz swoją stronę WordPress

InspectWP analizuje Twoją stronę WordPress pod kątem bezpieczeństwa, problemów SEO, zgodności z RODO i wydajności — za darmo.

Przeanalizuj stronę za darmo