WordPress REST API: dlaczego blokować tylko niezalogowane żądania, zamiast wyłączać ją całkowicie

WordPress REST API pokazuje nazwy użytkowników Twojej witryny przez adres wp-json nawet niezalogowanym odwiedzającym. Całkowite wyłączenie może sprawić, że zapis w edytorze blokowym się nie powiedzie, dlatego poniżej opisuję, jak blokować tylko niezalogowane żądania i sprawdzić to po odpowiedzi 401.
1️⃣ Czym jest WordPress REST API: adres wp-json i jego zadania
WordPress REST API to wbudowana funkcja WordPressa, która wymienia dane witryny, takie jak wpisy, strony i użytkownicy, w formacie JSON i odpowiada pod /wp-json/ po adresie witryny.
Pod /wp-json/ adresy dzielą się według rodzaju danych, np. [wp/v2/posts], [wp/v2/pages] i [wp/v2/users], a każdy z nich nazywa się endpointem. Edytor blokowy również wysyła żądania na te adresy, gdy zapisuje wpis.
https://example.com/wp-json/
https://example.com/wp-json/wp/v2/posts
https://example.com/wp-json/wp/v2/pages
https://example.com/wp-json/wp/v2/users2️⃣ Nazwy użytkowników ujawniane przez wp-json
Endpoint [wp/v2/users] zwraca nazwę wyświetlaną i slug każdego użytkownika, który opublikował wpisy, a domyślnie slug zawiera po prostu login. Na koncie administratora witryny testowej https://testpilotweb.com/ slug i login również były takie same.
Gdy login jest ujawniony, atakującemu wystarczy zdobyć hasło, by się zalogować, a na ekranie logowania WordPressa w witrynie testowej tylko 7 października 2026 zarejestrowano 2570 prób ataku brute force.
Nawet po zablokowaniu tego adresu ten sam login zostaje w adresie strony autora (/author/login/).
3️⃣ Co się psuje po całkowitym wyłączeniu
Całkowite wyłączenie WP REST API najpierw psuje zapis wpisów w edytorze blokowym, dlatego Perfmatters, jedna z wtyczek optymalizacyjnych do WordPressa, dzieli wyłączanie na dwa poziomy: [Disable for Non-Admins] i [Disable When Logged Out]. W witrynach z kontami autorów lub współpracowników [Disable for Non-Admins] blokuje też zapis wpisów z tych kont.
Nawet w witrynie, która blokowała tylko niezalogowane żądania, po podłączeniu konektora MCP w claude.ai i zakończeniu uwierzytelniania pojawiło się 0 narzędzi. W logu serwera wszystkie żądania MCP miały kod 401, a przyczyną było to, że Perfmatters blokował żądanie, zanim MCP sprawdził token.
| Wartość [Disable REST API] | Adres users dla niezalogowanych odwiedzających | Zapis wpisów z kont innych niż administrator | Kiedy pasuje |
|---|---|---|---|
| Default (Enabled) | Nazwy użytkowników widoczne | Zapis działa | — |
| Disable for Non-Admins | 401 | Zapis się nie udaje | Witryny bez kont autorów i współpracowników |
| Disable When Logged Out | 401 | Zapis działa | Witryny z kontami autorów; dla połączeń z tokenem, np. MCP, dodaj ścieżkę wyjątku |
4️⃣ Blokowanie tylko niezalogowanych żądań (Perfmatters)
W panelu WordPressa przejdź do [Settings] → [Perfmatters] → [General], w sekcji [Core] zmień [Disable REST API] na [Disable When Logged Out] i kliknij [Save Changes].


Języki obsługiwane przez Perfmatters: angielski (domyślny), koreański, niemiecki, francuski, włoski, niderlandzki, portugalski (Brazylia), rosyjski, ukraiński, turecki, bułgarski, węgierski, indonezyjski, perski, chiński (uproszczony)

Gdy otworzysz /wp-json/wp/v2/users w oknie incognito bez logowania, wróci odpowiedź 401 z komunikatem [Sorry, you do not have permission to make REST API requests.], a edytor blokowy po zalogowaniu nadal normalnie zapisuje wpisy.
[
{
"id": 1,
"name": "User A",
"slug": "user_a",
"link": "https://example.com/author/user_a/"
}
]
{
"code": "rest_authentication_error",
"message": "Sorry, you do not have permission to make REST API requests.",
"data": { "status": 401 }
}
5️⃣ Wyjątki dla zablokowanych ścieżek
Jeśli przy włączonej blokadzie trzeba otworzyć tylko jedną ścieżkę, dodaj ją do filtra [perfmatters_rest_api_exceptions] w Perfmatters. Problem 0 narzędzi w konektorze MCP claude.ai rozwiązał fragment kodu PHP w menu [Code] Perfmatters, który jako wyjątek ustawia tylko ścieżkę MCP.
add_filter('perfmatters_rest_api_exceptions', function($exceptions) {
$exceptions[] = '/mcp/mcp-oauth-server';
return $exceptions;
});Nawet po dodaniu wyjątku żądania bez tokena blokuje sam MCP komunikatem [MCP authentication required.] i odpowiedzią 401, a /wp-json/wp/v2/users dalej zwraca odpowiedź 401 z Perfmatters.
[MCP authentication required.]
[Remove REST API Links] w tej samej sekcji [Core] usuwa tylko link api.w.org z nagłówka strony i nagłówków odpowiedzi; sama WP REST API dalej odpowiada.
🔢 FAQ & polecane treści
MCP
WP Rocket MCP Server
Jak podłączyć narzędzia AI, żeby czyściły cache i zmieniały ustawienia zamiast panelu administracyjnego.
Bezpieczeństwo
Wordfence vs iThemes Security
Porównanie dwóch wtyczek bezpieczeństwa, które blokują ataki brute force i malware.
ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.