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

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/users2️⃣ wp-json ile açığa çıkan kullanıcı adları
[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
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ğeri | Oturumu kapalı ziyaretçiler için users adresi | Yönetici olmayan hesapların yazı kaydetmesi | Uygun olduğu durum |
|---|---|---|---|
| Default (Enabled) | Kullanıcı adları açıkta | Kaydedilir | — |
| Disable for Non-Admins | 401 | Kaydetme başarısız | Yazar veya katılımcı hesabı olmayan siteler |
| Disable When Logged Out | 401 | Kaydedilir | Yazar hesabı olan siteler; MCP gibi token bağlantıları için istisna yolu ekleyin |
4️⃣ Yalnızca oturumu kapalı istekleri engelleme ayarı (Perfmatters)
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.


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ş)

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.
[
{
"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️⃣ Engellenen yollara istisna ekleme
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.
[MCP authentication required.]
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
MCP
WP Rocket MCP Server
Yapay zekâ araçlarının yönetim ekranı yerine önbelleği temizleyip ayarları değiştirmesi için bağlantı yöntemi.
Güvenlik
Wordfence vs iThemes Security
Kaba kuvvet saldırılarını ve kötü amaçlı yazılımları engelleyen iki güvenlik eklentisini karşılaştırıyor.
ℹ️ 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.