Hushfort

xmlrpc.php nedir ve WordPress'te nasıl kapatılır?

Yazan: Eureka Studio · Güncellendi

Kısa yanıt

XML-RPC, uygulamaların xmlrpc.php üzerinden giriş yapmasını sağlar; bu, wp-login.php'yi gizlemenin kapatmadığı ayrı bir kapıdır. Jetpack ya da WordPress mobil uygulamasını kullanmıyorsan kapatmak güvenlidir. Dosyayı .htaccess ile engelle, xmlrpc_enabled filtresini ekle ya da pingback'leri koruyarak XML-RPC girişini kapatan bir eklenti kullan. Sonra test et.

Adımlar

  1. 1Adım 1

    xmlrpc.php'nin cevap verip vermediğini kontrol et

    siten.com/xmlrpc.php adresine git. "XML-RPC server accepts POST requests only." yazısını görüyorsan kapı açık demektir.

    yoursite.com/xmlrpc.php adresinin cevabı: XML-RPC server accepts POST requests only
  2. 2Adım 2

    Neden önemli olduğunu anla

    Hushfort'un Yüzey Taraması bunu gerçekten dener. Açık bir sitede gizli giriş yolunu atlayarak parola denenebildiğini ve system.multicall sayesinde tek bir isteğin yüzlerce deneme taşıyabildiğini bildirir.

    Hushfort Genel Durum ekranında Yüzey Taraması: XML-RPC açık, system.multicall da açık; ayrıca REST kullanıcı listesi ve yazar taraması demo-admin kullanıcı adını sızdırıyor
  3. 3Adım 3

    Ne kadar kapatacağını seç

    Hushfort → Yüzey Daraltma sekmesini aç ve Yüzey daraltmayı aç anahtarını aç. XML-RPC, çoğu siteye uyan "Girişi kapat, pingback açık kalsın (önerilen)" seçeneğiyle başlar. "Tamamen kapat" en sıkı seçenektir ama Jetpack'i ve resmi mobil uygulamayı durdurur. Kaydet'e bas.

    Yüzey Daraltma açık, XML-RPC Girişi kapat, pingback açık kalsın (önerilen) olarak ayarlı
  4. 4Adım 4

    XML-RPC üzerinden girişin reddedildiğini test et

    Genel Durum ekranına dön ve Yeniden tara'ya bas. XML-RPC satırında artık "Giriş kapalı — parola denemesi reddediliyor, pingback çalışmaya devam ediyor." yazmalı.

    Düzeltmeden sonra Yüzey Taraması: XML-RPC, REST kullanıcı listesi, yazar taraması ve site haritası yazar listesi kapalı

Neden önemli

XML-RPC, WordPress için eski bir uzaktan kumanda arayüzüdür. REST API yokken masaüstü editörler ve mobil uygulamalar yazıları bununla yayınlardı. Hâlâ her WordPress sitesiyle birlikte /xmlrpc.php adresinde gelir ve hâlâ her istekte bir kullanıcı adı ve parola kabul eder.

Bu da onu ikinci bir giriş kapısı yapar. wp-login.php dosyasını gizlemek ona dokunmaz. Yalnızca giriş formunu izleyen deneme sınırı kodu onu görmez. Üstelik system.multicall ile tek bir HTTP isteği yüzlerce parola tahmini taşıyabilir. İstekleri sayan bir sınır, beş yüz deneme olan yerde tek bir deneme görür.

Bu teorik bir şey değil. Bu katmanı, giriş sayfası zaten gizli olan bir mağaza XML-RPC üzerinden parola denemeleri almaya devam ettikten sonra geliştirdik.

XML-RPC kullanıyor musun? Aşağıdakilerin hiçbiri senin için geçerli değilse büyük ihtimalle hayır:

  • Siteyi Jetpack'e bağlıyorsun.
  • Resmi WordPress mobil uygulamasından yayın ya da moderasyon yapıyorsun.
  • Eski bir masaüstü blog aracı ya da senin adına yazı yayınlamak için (uygulama parolası yerine) WordPress kullanıcı adını ve parolanı isteyen bir servis kullanıyorsun.
  • Başka bloglardan gelen pingback'lere güveniyorsun.

Emin değilsen yalnızca girişi kapat, pingback'leri koru. Bu, parola tahmini riskini ortadan kaldırır ve zararsız kısımları yerinde bırakır. Daha sonra her zaman daha sıkı bir seçeneğe geçebilirsin.

Sık yapılan hatalar

  • Girişi gizleyip orada durmak. Parola tahmini doğrudan xmlrpc.php dosyasına kayar.
  • Kontrol etmeden dosyanın tamamını engellemek. Jetpack ve resmi WordPress mobil uygulaması XML-RPC üzerinden bağlanır. Bunları kullanıyorsan yalnızca giriş metotlarını kapat ya da dikkatle test et.
  • Test etmeden bir anahtara güvenmek. Bazı yöntemler XML-RPC'nin bazı kısımlarını cevap verir halde bırakır. Sonucu her zaman gerçek bir istekle kontrol et (4. adıma ya da sitenin neleri açık ettiğini kontrol etme rehberine bak).
  • Önbellek katmanını unutmak. Bir CDN kuralı xmlrpc.php dosyasını zaten engelliyorsa WordPress düzeyindeki bir ayarın hiçbir etkisi görünmez. Sorun değil; yalnızca işi hangi katmanın yaptığını bil.

Eklentisiz

Seçenek 1: xmlrpc_enabled filtresi. Bunu küçük bir must-use eklentisine (wp-content/mu-plugins/no-xmlrpc-login.php) ya da alt temanın functions.php dosyasına ekle:

<?php
add_filter( 'xmlrpc_enabled', '__return_false' );

Bu, giriş gerektiren XML-RPC metotlarını kapatır. Pingback'ler giriş gerektirmediği için çalışmaya devam eder. Tek başına system.multicall metodunu kaldırmaz ve dosya isteklere cevap vermeyi sürdürür. Multicall metodunu da kaldırmak için:

<?php
add_filter( 'xmlrpc_methods', function ( $methods ) {
    unset( $methods['system.multicall'] );
    return $methods;
} );

Seçenek 2: dosyayı sunucuda engellemek. Apache'de, .htaccess içinde:

<Files xmlrpc.php>
  Require all denied
</Files>

Nginx'te: location = /xmlrpc.php { deny all; }. En sıkı seçenek budur ve sunucuya hiçbir yük getirmez; ama pingback'leri, Jetpack'i ve mobil uygulamayı da öldürür ve WordPress'in dışında durduğu için firma değiştirdiğinde unutulması kolaydır.

Bir şeyler ters giderse

  • Jetpack bağlantı hatası gösteriyor. Jetpack'in XML-RPC'ye ihtiyacı var. "Tamamen kapat" seçeneğinden "Girişi kapat, pingback açık kalsın" seçeneğine geç ya da sunucu kuralını kaldır.
  • WordPress mobil uygulaması giriş yapamıyor. Sebep aynı. Ya mobilde tarayıcıyı kullan ya da XML-RPC girişine izin verip deneme sınırı ve iki adımlı doğrulamaya güven.
  • Bir yayın aracı yazı göndermeyi bıraktı. XML-RPC kullanıp kullanmadığını kontrol et. Modern araçların çoğu uygulama parolalarıyla REST API'ye geçti.

Hushfort ile

Arka Kapı Kilidi Hushfort Pro'nun parçasıdır. XML-RPC'nin açık olup olmadığını gösteren Yüzey Taraması ise ücretsiz WordPress güvenlik eklentisi Hushfort Security'de yer alır.

Arka Kapı Kilidi, Hushfort'un Yüzey Daraltma katmanının bir parçasıdır. Sana dört seçenek sunar:

  • Girişi kapat, pingback açık kalsın (önerilen): XML-RPC üzerinden parola tahmini imkânsız hale gelir, pingback ve trackback'ler çalışmaya devam eder. Mağaza siteleri için iyi bir seçim.
  • Tamamen kapat: en sıkı seçenek. Jetpack ve resmi mobil uygulama bağlanamaz.
  • Yalnızca system.multicall'ı kapat: toplu tahmini kapatır, gerisine dokunmaz.
  • Dokunma: WordPress varsayılanı.

Ardından Yüzey Taraması sonucu gerçek isteklerle kontrol eder; böylece dışarıdan birinin ne gördüğünü görürsün. Yük Koruması da xmlrpc.php isteklerini normal bir sayfa görüntülemesinden daha pahalı fiyatlar; bu da geriye kalan gürültüyü yavaşlatır.

Sık sorulan sorular

WordPress'te XML-RPC'yi kapatmak güvenli mi?

Çoğu site için evet. Modern WordPress blok düzenleyici ve çoğu entegrasyon için REST API kullanır. XML-RPC'yi hâlâ Jetpack, resmi WordPress mobil uygulaması ve bazı eski yayın araçları kullanıyor; önce bunları kontrol et.

Giriş sayfasını gizlemek xmlrpc.php'yi de gizler mi?

Hayır. xmlrpc.php kendi başına kullanıcı adı ve parola kabul eder; wp-login.php'yi gizledikten sonra da saldırganlar orada tahmine devam edebilir.

system.multicall nedir?

Tek bir istekte çok sayıda çağrı çalıştıran bir XML-RPC metodu. Saldırganlar bunu tek bir istekte yüzlerce parola tahmini göndermek için kullanır; bu da istekleri sayan sınırların arasından sızar.

XML-RPC'yi kapatmak pingback'leri bozar mı?

Dosyanın tamamını engellemek bozar. Yalnızca XML-RPC girişini kapatıp pingback metodunu açık bırakmak pingback ve trackback'lerin çalışmasını sürdürür.

xmlrpc_enabled filtresi XML-RPC'yi tamamen kapatır mı?

Hayır. Yalnızca giriş gerektiren metotları kapatır. Dosya hâlâ cevap verir, pingback çağrıları da çalışmaya devam eder. Çoğu zaman istenen budur ama sonucu test et.

Hata bildir ya da özellik iste

Mesajın doğrudan Hushfort’u geliştiren ekibe gider.

Konu ne?

Yalnızca sana yanıt vermek için kullanılır.

Bu bilgileri yalnızca sana yanıt vermek için kullanırız. Gizlilik