Xmlrpc.php ortadan kaldırmak için en iyi yol?


Yanıtlar:


26

WordPress 3.5'ten beri bu seçenek ( XML-RPC) varsayılan olarak etkindir ve WordPress'ten kapatma dashboardözelliği ortadan kalkmıştır.

Bu kod pasajını kullanım için ekleyin functions.php:

// Disable use XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );

// Disable X-Pingback to header
add_filter( 'wp_headers', 'disable_x_pingback' );
function disable_x_pingback( $headers ) {
    unset( $headers['X-Pingback'] );

return $headers;
}

Ne diyorsa yapsa da, bir site onu vurarak saldırı altında olduğunda yoğunlaşabilir. Dosyanızda
aşağıdaki kod parçasını kullanarak daha iyi olabilirsiniz .htaccess.

# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>

Veya bunu xmlrpc.php, NGINX sunucu bloğundan dosyaya erişimi devre dışı bırakmak için kullanın .

# nginx block xmlrpc.php requests
location /xmlrpc.php {
    deny all;
}

Ayrıca, devre dışı bırakmanın mobil üzerinden girişleri etkileyebileceğini unutmayın. Eğer doğruysam WordPress mobil uygulamasının buna ihtiyacı var.
Kullanımı hakkında daha fazla bilgi için Kodeks'e bakınız XML-RPC.

  • Lütfen düzenlemeden / eklemeden önce daima dosyaları yedekleyin.


Düzenleme / Güncelleme

@Prosti, -Sen kesinlikle haklısın- RESTful APIWordPress için sunacak seçenekler hakkında !

Bunu söylemeyi unuttum. O zamanlar mümkün olmayan çekirdeğe ( WordPress sürüm 4.1 ) zaten entegre edilmiş olmalıydı . Ancak göründüğü gibi, WordPress 4.5'te çekirdek olacaktır.

Şu an için alternatif bu eklenti: WordPress REST API (Sürüm 2) Ayrıca WordPress için çekirdek olana
kadar kullanabilirsiniz Restful API.
WordPress 4.5'in piyasaya sürülmesi için hedef tarih. (12 Nisan 2016 (+ 3w))

İlgilenenler RESTfuliçin Stackoverflow'ta çok güzel bir topluluk wiki'si var.


2
Eğer
haklıysam

2
Hala X-Pingbacktek yazı / sayfa için başlık almak isteyenler için. Biz tamamen kaldırmak için başka bir filtre kullanmak gerekir: add_filter('pings_open', '__return_false', PHP_INT_MAX);.
MinhTri

1
Buna benzer şeyler eklemek, functions.phptemaları değiştirirken tüm etkilerini kaybedecek. function.phpsadece tasarım amacıyla, bir eklenti kullanın!
David,

@David, elbette ama ppl daha sonra böyle bir eklenti yapmak yerine mu-plugins klasörünü kullanın. Ppl bunun gibi bir fonksiyona ihtiyaç duyduğunda / kullandığında, bir nedenden dolayı buna sahipler ve kimsenin (yönetici bile değil) bir eklentiyi devre dışı bırakma seçeneğinin olmasını istemiyorlar.
Charles

Orada =nginx conf kodunun ilk satırında eksik olan bir eşittir işareti ( ) var gibi görünüyor . Bu benim için çalıştı: location = /xmlrpc.php {
Dave 19

5

Htaccess dosyasını bilgisayar korsanlarından korumak için kullanıyoruz.

# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php

5

Web sunucunuzun yapılandırması yoluyla engelleme olanağınız varsa, @Charles'ın önerileri iyi.

Yalnızca php kullanarak devre dışı bırakabilirseniz, xmlrpc_enabledfiltre doğru yol değildir. Burada belgelenen gibi: https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/ yalnızca kimlik doğrulama gerektiren xml rpc yöntemlerini devre dışı bırakır.

Bunun yerine, xmlrpc_methodstüm yöntemleri devre dışı bırakmak için filtreyi kullanın:

<?php
// Disable all xml-rpc endpoints
add_filter('xmlrpc_methods', function () {
    return [];
}, PHP_INT_MAX);

Çalışıp çalışmadığını, katlama içeriğiyle xmlrpc.php dosyasına bir POST isteği göndererek çalışıp çalışmadığını test edebilirsiniz:

<methodCall>
    <methodName>system.listMethods</methodName>
</methodCall>

Filtre çalışıyorsa, sadece 3 yöntem kalmalıdır:

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
    <params>
        <param>
            <value>
                <array>
                    <data>
                        <value>
                            <string>system.multicall</string>
                        </value>
                        <value>
                            <string>system.listMethods</string>
                        </value>
                        <value>
                            <string>system.getCapabilities</string>
                        </value>
                    </data>
                </array>
            </value>
        </param>
    </params>
</methodResponse>

hızlı bir şekilde curl ile test edebilirsiniz:

curl -X POST \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/xml' \
  -d '<methodCall><methodName>system.listMethods</methodName></methodCall>' \
  https://your-wordpress-site.com/xmlrpc.php

4

Yapılacak en iyi şey xmlrpc.php, dosyanın kendisini silmek veya devre dışı bırakmak yerine, eklentili işlevleri devre dışı bırakmaktır. Dosyanın kendisi WordPress çekirdek güncellemelerinde değiştirilirken, bir eklenti çekirdek güncellemelerinin ardından ve temaları değiştirirseniz devre dışı bırakılmasını sağlar.

Farklı eklentiler için https://wordpress.org/plugins/search.php?q=disable+xml-rpc adresine bakın . Hepsinin küçük farklılıkları var.

Bu eklentiler, temanın functions.phpdosyasına eklenen veya order,allow deny.htaccess'e bir kural ekleyen (diğer cevaplarda belirtildiği gibi) bir kural olarak aynı şeyi yapar ; fark, bir eklenti veya işlev olması xmlrpc.phpPHP üzerinden yapılan çağrıları devre dışı bırakır ve .htaccess'deki kural çalışır. web sunucusundaki mod_rewrite kullanarak (yani, Apache veya Nginx). Modern bir sunucuda PHP ve mod_rewrite kullanımı arasında kayda değer bir performans farkı yoktur.


3

WordPress'i IIS'de barındıran aşırı azınlık için benzer htaccess benzeri kısıtlamalar yapmak için IIS URL Yeniden Yazma modülünü kullanabilirsiniz. Aşağıdaki örnek, gerçek istemci IP'sinin X-Forwarded-For başlığında geldiğini, bilinen beyaz liste IP'sinin 55.55.555.555 olduğunu ve beyaz liste dışı IP'lere HTTP 404 ile yanıt vermek istediğinizi varsayar.

<rule name="wordpress-restrictions" enabled="true" stopProcessing="true">
    <match url="(^xmlrpc.php)|(^wp-admin)|(^wp-login.php)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_X_FORWARDED_FOR}" pattern="(^55\.55\.555\.555$)" negate="true" />
    </conditions>
    <action type="CustomResponse" statusCode="404" subStatusCode="44" statusReason="File or directory not found" statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>


0

Yakın zamanda, 6.3.12 sürümünden itibaren herhangi bir yere doğrudan erişimi engelleme olanağına sahip olan Wordfence'i yükledim. /Xmlrpc.php dosyasını, "Bu URL’lere erişen IP’leri hemen engelle" adlı yasaklı erişim IP’leri listesindeki Seçenekler sayfasına koymak, her 15 dakikada bir engellendiğini gösteriyor.

Bu aynı zamanda, farklı bir IP adresiyle tekrar tekrar gelen sinir bozucu botlardan kaçmak için bir URL'yi engelleyebilme avantajına sahiptir.

Geçerli işlemler için Apps tarafından xmlrpc.php kullanımına izin verip vermediğini bilmiyorum.

İlk başta sunucuda 504 Timeout ve 502 Bad Gateway hatası üreten bazı sorunlar yaşadım, ancak sorun çözüldü gibi görünüyor.

Sonuçtan çok etkilendim ve site Wordfence'ı kurmadan önce hacklendikten sonra ve her zaman WordPress ve eklentilerin en son sürümüne sahip olmasına rağmen değerli bir temizleme profili üretti.

Wordfence https://www.wordfence.com/


/xmlrpc.phpErişime giren IP'leri yasaklayan bir güvenlik kuralı eklemek , meşru trafiği engelleyebilecek gibi görünüyor. Geri tepme özelliği olan bir site sitenize bağlantılar sağladıysa, o site o URL’ye bir istek gönderir ve derhal engellenir ... sorunlara yol açabilir gibi görünüyor.
adam-asdf

0

nginx için bu küçük kodu kullanıyorum ve bu% 100 çalışıyor

location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.