WordPress JSON API uç noktaları

WordPress’in JSON API Uç Noktalarının Taranmasını Önlemek

WordPress’in JSON API uç noktalarının (REST API endpoint’leri) taranmasını önlemek, bazı durumlarda güvenlik ve performans açısından gerekli veya faydalı olabilir. Ancak, bu ihtiyaç sitenin yapısına, kullandığı eklentilere ve kullanım amacına göre değişir.

Neden JSON API Uç Noktalarının Taranması Önlenmelidir?

Kullanıcı Bilgilerinin Açığa Çıkması: /wp-json/wp/v2/users uç noktası, oturum açmış kullanıcıların kullanıcı adlarını listeleyebilir. Bu, brute-force saldırılarına zemin hazırlar (saldırgan doğru kullanıcı adı ile şifre denemesi yapabilir).

Bilgi Toplama ve İstihbarat: JSON API, yazılar, sayfalar, medya, kategoriler gibi pek çok içeriğe API üzerinden ulaşılmasına izin verir. Bu bilgiler kötü niyetli kişiler tarafından sitenizin yapısını analiz etmek için kullanılabilir.

Kaynak Kullanımı ve DDoS Riski: Sürekli API taramaları sunucuya yük bindirir. Özellikle çok fazla içerik barındıran sitelerde performans problemleri oluşturabilir.

Kapatmanın Dezavantajları:

Bazı temalar, eklentiler (özellikle headless CMS veya mobil uygulama entegrasyonu) REST API’ye ihtiyaç duyar. Site içi AJAX istekleri veya Gutenberg editörü düzgün çalışmayabilir. Bu durumda tamamen kapatmak yerine, sınırlamak veya kimlik doğrulama ile korumak genelde daha iyi bir yaklaşımdır.

JSON API Erişimini Kısıtlama veya Kapatma Yolları

1. Eklenti ile Kısıtlama: Kullanımı kolay yöntemlerden biridir. Disable REST API eklentisi, belirli kullanıcı rollerine REST API erişimi izni verir. WPCode (Custom Code Snippet) eklentisi ile aşağıdaki kodlar eklenebilir.

2. Kod ile Kullanıcı Bilgilerini Gizleme:

// Kullanıcı uç noktasını engelle
add_filter( 'rest_endpoints', function( $endpoints ) {
if ( isset( $endpoints['/wp/v2/users'] ) ) {
unset( $endpoints['/wp/v2/users'] );
}
return $endpoints;
});

3. REST API’yi Tamamen Kapatmak:

add_filter( 'rest_authentication_errors', function( $result ) {
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_cannot_access', 'REST API yalnızca giriş yapmış kullanıcılar için kullanılabilir.', array( 'status' => 403 ) );
}
return $result;
});

4. .htaccess ile Dış Erişimi Engellemek (Apache için):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-json/wp/v2/users [NC]
RewriteRule ^(.*)$ - [R=403,L]
</IfModule>