Cara terbaik untuk menghilangkan xmlrpc.php?

25

Apa cara terbaik untuk menghilangkan file xmlrpc.php dari WordPress saat Anda tidak membutuhkannya?

prosti
sumber

Jawaban:

26

Sejak WordPress 3.5 opsi ini ( XML-RPC) diaktifkan secara default, dan kemampuan untuk mematikannya dari WordPress dashboardhilang.

Tambahkan cuplikan kode ini untuk digunakan di 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;
}

Meskipun melakukan apa yang dikatakannya, itu bisa menjadi intensif ketika sebuah situs diserang dengan memukulnya.
Anda mungkin lebih baik menggunakan potongan kode berikut dalam .htaccessfile Anda .

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

Atau gunakan ini untuk menonaktifkan akses ke xmlrpc.phpfile dari blok server NGINX.

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

Ketahuilah bahwa penonaktifan juga dapat berdampak pada info masuk melalui seluler. Jika saya benar aplikasi seluler WordPress memang membutuhkan ini.
Lihat Codex untuk informasi lebih lanjut tentang penggunaan XML-RPC.

  • Harap selalu membuat cadangan file sebelum mengedit / menambahkan.


Edit / Perbarui

@ Frosti, -Anda benar-benar benar- tentang opsi yang RESTful APIakan ditawarkan untuk WordPress!

Saya lupa menyebutkan ini. Seharusnya sudah diintegrasikan ke dalam inti ( WordPress versi 4.1 ) yang tidak mungkin pada waktu itu. Tapi sepertinya, akan menjadi inti di WordPress 4.5.

Alternatif untuk saat ini adalah plugin ini: WordPress REST API (Versi 2)
Anda dapat menggunakannya hingga Restful APIjuga merupakan inti untuk WordPress.
Tanggal target untuk rilis WordPress 4.5. (12 April 2016 (+ 3w))

Bagi mereka yang tertarik RESTful, Stackoverflow adalah wiki komunitas yang sangat bagus.

Charles
sumber
2
Jika saya benar aplikasi seluler WordPress memang membutuhkan ini - kemungkinan ini tidak akan diperlukan di masa mendatang setelah kami beralih ke WordPress RESTful API (WordPress 4.5)
prosti
2
Bagi mereka yang masih mendapatkan X-Pingbacktajuk untuk satu posting / halaman. Kita perlu menggunakan filter lain untuk menghapus sepenuhnya: add_filter('pings_open', '__return_false', PHP_INT_MAX);.
MinhTri
1
Menambahkan hal-hal seperti itu ke functions.phpakan kehilangan semua efek ketika mengubah tema. function.phphanya untuk tujuan desain, gunakan plugin!
David
@ David, tentu tapi ppl maka lebih baik gunakan folder mu-plugins, daripada membuat untuk plugin semacam itu. Ketika ppl membutuhkan / menggunakan fungsi seperti ini, mereka memiliki alasan tertentu dan tidak ingin siapa pun (bahkan seorang admin) memiliki opsi untuk menonaktifkan plugin.
Charles
Sepertinya ada tanda sama dengan ( =) yang hilang di baris pertama dari kode nginx conf di sana. Ini bekerja untuk saya: location = /xmlrpc.php {
Dave
5

Kami menggunakan file htaccess untuk melindunginya dari peretas.

# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
Jorin van Vilsteren
sumber
5

Ketika Anda memiliki kemampuan untuk memblokirnya melalui konfigurasi server web Anda, saran @Charles baik.

Jika Anda hanya dapat menonaktifkannya menggunakan php, xmlrpc_enabledfilternya tidak tepat. Seperti yang didokumentasikan di sini: https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/ itu hanya menonaktifkan metode xml rpc yang memerlukan otentikasi.

Alih-alih menggunakan xmlrpc_methodsfilter untuk menonaktifkan semua metode:

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

Anda dapat menguji apakah itu berfungsi dengan mengirimkan permintaan POST ke xmlrpc.php dengan konten berikut:

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

Jika filter berfungsi, seharusnya hanya ada 3 metode yang tersisa:

<?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>

Anda dapat dengan cepat mengujinya dengan ikal:

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
tweber
sumber
4

Hal terbaik untuk dilakukan adalah menonaktifkan xmlrpc.phpfungsi dengan plugin daripada menghapus atau menonaktifkan file itu sendiri. File itu sendiri akan diganti pada pembaruan inti WordPress, sementara sebuah plugin akan tetap dinonaktifkan setelah pembaruan inti dan jika Anda mengubah tema.

Lihat https://wordpress.org/plugins/search.php?q=disable+xml-rpc untuk berbagai plugin. Mereka semua memiliki perbedaan kecil.

Plugin ini melakukan hal yang sama seperti fungsi yang ditambahkan ke file tema functions.phpatau menambahkan order,allow denyaturan ke .htaccess (seperti dijabarkan dalam jawaban lain), dengan perbedaan menjadi plugin atau fungsi menonaktifkan panggilan ke xmlrpc.phpmelalui PHP, dan aturan dalam .htaccess berfungsi dengan memanfaatkan mod_rewrite di server web (yaitu, Apache atau Nginx). Tidak ada perbedaan kinerja yang cukup besar antara menggunakan PHP dan mod_rewrite pada server modern.

markratledge
sumber
3

Untuk minoritas ekstrem yang meng-hosting WordPress di IIS, Anda bisa menggunakan modul Penulisan Ulang URL IIS untuk melakukan pembatasan serupa seperti htaccess. Contoh di bawah ini mengasumsikan IP klien sebenarnya datang di header X-Forwarded-For, IP daftar putih yang diketahui adalah 55.55.555.555, dan bahwa Anda ingin merespons dengan HTTP 404 ke IP non-daftar putih.

<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>
Kuningan
sumber
0

Dengan cara pertama Anda dapat memasukkan kode add_filter('xmlrpc_enabled', '__return_false');ke file functions.phpatau plugin spesifik situs. Jelas menempatkannya di situs spesifik lebih direkomendasikan daripada mengedit file functions.php.

dan cara-cara lain untuk menghilangkan xmlrpc

Yaser Hamzeloy
sumber
0

Saya baru saja menginstal Wordfence yang, pada versi 6.3.12 memiliki kemampuan untuk memblokir akses langsung ke lokasi mana pun. Menempatkan /xmlrpc.php ke halaman Opsi dalam daftar IP akses yang dilarang "Segera blokir IP yang mengakses URL ini" sekarang menunjukkan satu upaya diblokir setiap 15 menit.

Ini juga memiliki keuntungan karena dapat memblokir URL untuk melarikan diri dari bot sial yang kembali dengan waktu alamat IP yang berbeda dan lagi.

Saya tidak tahu apakah itu memungkinkan penggunaan xmlrpc.php oleh Apps untuk operasi yang valid.

Saya punya beberapa masalah dengan itu menghasilkan 504 Timeout dan 502 kesalahan Gateway Buruk pada server pada awalnya tetapi tampaknya telah diselesaikan.

Sangat terkesan dengan hasilnya sejauh ini dan menghasilkan profil pembersihan yang berharga setelah situs tersebut diretas sebelum menginstal Wordfence dan meskipun selalu memiliki versi terbaru dari WordPress dan plugin.

Wordfence https://www.wordfence.com/

Steve
sumber
Menambah /xmlrpc.phpaturan keamanan yang melarang IP yang mengaksesnya sepertinya dapat memblokir lalu lintas yang sah. Jika situs dengan pingbacks mengaktifkan tautan ke situs Anda, situs itu akan mengirimkan permintaan ke URL itu dan segera diblokir ... sepertinya itu dapat menyebabkan masalah.
adam-asdf
0

saya gunakan untuk nginx Kode kecil ini dan ini berfungsi 100%

location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}
Manuel K.
sumber