Jawaban:
Sejak WordPress 3.5 opsi ini ( XML-RPC
) diaktifkan secara default, dan kemampuan untuk mematikannya dari WordPress dashboard
hilang.
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 .htaccess
file Anda .
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>
Atau gunakan ini untuk menonaktifkan akses ke xmlrpc.php
file 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 penggunaanXML-RPC
.
- Harap selalu membuat cadangan file sebelum mengedit / menambahkan.
@ Frosti, -Anda benar-benar benar- tentang opsi yang RESTful API
akan 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 API
juga 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.
X-Pingback
tajuk untuk satu posting / halaman. Kita perlu menggunakan filter lain untuk menghapus sepenuhnya: add_filter('pings_open', '__return_false', PHP_INT_MAX);
.
functions.php
akan kehilangan semua efek ketika mengubah tema. function.php
hanya untuk tujuan desain, gunakan plugin!
=
) yang hilang di baris pertama dari kode nginx conf di sana. Ini bekerja untuk saya: location = /xmlrpc.php {
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
Ketika Anda memiliki kemampuan untuk memblokirnya melalui konfigurasi server web Anda, saran @Charles baik.
Jika Anda hanya dapat menonaktifkannya menggunakan php, xmlrpc_enabled
filternya 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_methods
filter 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
Hal terbaik untuk dilakukan adalah menonaktifkan xmlrpc.php
fungsi 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.php
atau menambahkan order,allow deny
aturan ke .htaccess (seperti dijabarkan dalam jawaban lain), dengan perbedaan menjadi plugin atau fungsi menonaktifkan panggilan ke xmlrpc.php
melalui 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.
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>
Dengan cara pertama Anda dapat memasukkan kode add_filter('xmlrpc_enabled', '__return_false');
ke file functions.php
atau plugin spesifik situs. Jelas menempatkannya di situs spesifik lebih direkomendasikan daripada mengedit file functions.php
.
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.
/xmlrpc.php
aturan 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.