WordPress REST API: Tamamen kapatmak yerine neden yalnızca oturumu kapalı istekler engellenir

Satış ortaklığı bildirimi v3.1
Satış ortaklığı bildirimi v3.2 (yalnızca mobil)

WordPress REST API, oturum açmamış ziyaretçilere bile sitenizin kullanıcı adlarını wp-json adresi üzerinden gösterir. Tamamen kapatmak blok düzenleyicide kaydetmenin başarısız olmasına yol açabildiği için yalnızca oturumu kapalı istekleri engelleyip bunu 401 yanıtıyla doğrulamanın yolunu derledim.

1️⃣ WordPress REST API nedir: wp-json adresi ve görevi

WordPress REST API, yazılar, sayfalar ve kullanıcılar gibi site verilerini JSON biçiminde alıp veren yerleşik bir WordPress özelliğidir ve site adresinin arkasındaki /wp-json/ altında yanıt verir.

/wp-json/ altında adresler [wp/v2/posts], [wp/v2/pages] ve [wp/v2/users] gibi veri türlerine göre ayrılır ve bu adreslerin her birine uç nokta (endpoint) denir. Blok düzenleyici de bir yazıyı kaydederken bu adreslere istek gönderir.

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/users

2️⃣ wp-json ile açığa çıkan kullanıcı adları

  • ↪️ Neden engellenir: users 401 · yazar sayfalarında da görünür

[wp/v2/users] uç noktası, yazı yayımlamış her kullanıcı için görünen adı ve slug değerini döndürür; slug'da varsayılan olarak giriş kullanıcı adı olduğu gibi yer alır. Test sitesi https://testpilotweb.com/ adresindeki yönetici hesabında da slug ile giriş kullanıcı adı aynıydı.

Giriş kullanıcı adı açığa çıkınca saldırganın giriş yapması için yalnızca şifreyi bulması yeterli olur; test sitesinin WordPress giriş ekranında da yalnızca 7 Ekim 2026'da 2.570 kaba kuvvet denemesi kaydedildi.

Bu adresi engelleseniz de aynı kullanıcı adı yazar sayfası adresinde (/author/kullaniciadi/) olduğu gibi kalır.

3️⃣ Tamamen kapatınca bozulan şeyler

  • ↪️ Blok düzenleyicide kaydetme · MCP'de 0 araç

WP REST API'yi tamamen kapatırsanız önce blok düzenleyicide yazı kaydetme başarısız olur; WordPress optimizasyon eklentilerinden Perfmatters da bu yüzden kapatma kapsamını [Disable for Non-Admins] ve [Disable When Logged Out] olarak iki aşamaya ayırır. Sitenizde yazar veya katılımcı hesapları varsa [Disable for Non-Admins] bu hesapların yazı kaydetmesini de engeller.

Yalnızca oturumu kapalı istekleri engelleyen bir sitede bile claude.ai'ye MCP bağlayıcısı bağlandığında, kimlik doğrulama bittikten sonra 0 araç göründü. Sunucu kayıtlarında tüm MCP istekleri 401 olarak kaldı; nedeni, Perfmatters'ın isteği MCP token'ı kontrol etmeden önce engellemesiydi.

[Disable REST API] değeriOturumu kapalı ziyaretçiler için users adresiYönetici olmayan hesapların yazı kaydetmesiUygun olduğu durum
Default (Enabled)Kullanıcı adları açıktaKaydedilir—
Disable for Non-Admins401Kaydetme başarısızYazar veya katılımcı hesabı olmayan siteler
Disable When Logged Out401KaydedilirYazar hesabı olan siteler; MCP gibi token bağlantıları için istisna yolu ekleyin

4️⃣ Yalnızca oturumu kapalı istekleri engelleme ayarı (Perfmatters)

  • ↪️ Ayarın yeri · 401 yanıtını kontrol etme

WordPress yönetim ekranında [Settings] → [Perfmatters] → [General] yolunda, [Core] bölümündeki [Disable REST API] değerini [Disable When Logged Out] yapın ve [Save Changes] düğmesine tıklayın.

WordPress Settings → Perfmatters → General(WordPress REST API)
Perfmatters Disable REST API: Disable When Logged Out

Perfmatters'ın desteklediği diller: İngilizce (varsayılan), Korece, Almanca, Fransızca, İtalyanca, Felemenkçe, Portekizce (Brezilya), Rusça, Ukraynaca, Türkçe, Bulgarca, Macarca, Endonezce, Farsça, Çince (basitleştirilmiş)

Perfmatters settings simulator: General → Core
Perfmatters ayar simülatörü · Perfmatters inceleme · rehber

Oturum açmadan gizli pencerede /wp-json/wp/v2/users adresini açarsanız [Sorry, you do not have permission to make REST API requests.] mesajıyla birlikte 401 yanıtı döner; oturum açıkken blok düzenleyici yazıları kaydetmeye devam eder.

🔌 Aynı istek, iki farklı yanıt GET /wp-json/wp/v2/users
Engellenmemiş site
200
Oturum açmamış ziyaretçiler de kullanıcı adlarını görebilir.
[
  {
    "id": 1,
    "name": "User A",
    "slug": "user_a",
    "link": "https://example.com/author/user_a/"
  }
]
[Disable When Logged Out] kullanılan site
401
Oturum açılmadan yapılan isteklere mesajla birlikte 401 yanıtı döner.
{
  "code": "rest_authentication_error",
  "message": "Sorry, you do not have permission to make REST API requests.",
  "data": { "status": 401 }
}
slug slug'da varsayılan olarak giriş kullanıcı adı olduğu gibi yer alır.
Soldaki yalnızca yanıttaki dört alanı (id · name · slug · link) gösteriyor; ad bir örnektir (user_a).


5️⃣ Engellenen yollara istisna ekleme

  • ↪️ MCP yolu istisnası · REST API bağlantılarını kaldırmadan farkı

Engelleme açıkken yalnızca belirli bir yolu açmanız gerekiyorsa o yolu Perfmatters'ın [perfmatters_rest_api_exceptions] filtresine ekleyin. claude.ai MCP bağlayıcısındaki 0 araç sorunu, Perfmatters [Code] menüsünde bir PHP kod parçacığı oluşturup yalnızca MCP yolunu istisna yaparak çözüldü.

add_filter('perfmatters_rest_api_exceptions', function($exceptions) {
    $exceptions[] = '/mcp/mcp-oauth-server';
    return $exceptions;
});

İstisna ekledikten sonra bile token olmayan istekleri MCP kendisi [MCP authentication required.] mesajı ve 401 yanıtıyla engeller; /wp-json/wp/v2/users ise Perfmatters'ın 401 yanıtını döndürmeye devam eder.

🚦 Bir isteğin geçtiği sıra
İstisnadan önce · MCP isteği
[Disable When Logged Out] açıkken claude.ai MCP bağlayıcısının kimlik doğrulamadan sonra gönderdiği istek.
Perfmatters
401 ile engellendi
→↓
MCP token kontrolü
Ulaşılamadı
→↓
Sonuç
0 araç
İstisnadan sonra · MCP isteği
/mcp/mcp-oauth-server yolu Perfmatters istisnalarına eklenmiş durumda.
Perfmatters
İstisna yolu olduğu için geçer
→↓
MCP token kontrolü
MCP kendisi kontrol eder
→↓
Sonuç
Token yoksa 401
[MCP authentication required.]
İstisnadan sonra · /wp-json/wp/v2/users
İstisnalara eklenmeyen yollar engelli kalır.
Perfmatters
401 ile engellendi
→↓
Sonuç
Kullanıcı adları gizli kalır
⚠️ Perfmatters isteği MCP token kontrolünden önce engeller.

Aynı [Core] bölümündeki [Remove REST API Links], yalnızca sayfa başlığındaki ve yanıt başlıklarındaki api.w.org bağlantısını kaldırır; WP REST API'nin kendisi yanıt vermeye devam eder.

🔢 SSS & önerilen içerikler

xmlrpc.php, REST API'den farklı bir adres olduğu için REST API engellense de yanıt vermeye devam eder. Test sitesinde yalnızca 8 Ekim 2026'da xmlrpc.php'ye 734 POST isteği kaydedildi; Perfmatters'ta bunu aynı [Core] bölümündeki [Disable XML-RPC] ile engelleyebilirsiniz.

WP Rocket /wp-json/ adreslerini önbellek hariç tutma listesinde tuttuğu için REST API yanıtları kaydettiğiniz anda değişir. [Remove REST API Links] gibi sayfa HTML'sini değiştiren ayarlar ise önbellek temizlendikten sonra yansır.

Hayır. WordPress blok düzenleyicisi yazıları kaydederken REST API'ye istek gönderir; claude.ai gibi yapay zekâ araçlarını bağlayan MCP bağlayıcıları da /wp-json/ altındaki yolları kullanır.

ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İnsan olduğunuzu kanıtlayın: 6   +   5   =