غیرفعال کردن کامل پروتکل XML-RPC در وردپرس
کد زیر را به functions.php یا یک افزونه اختصاصی اضافه کنید تا پروتکل XML-RPC به کلی غیرفعال شود.
مشخصات فنی و شناسنامه کد (Code Information)
بازبینی: 1405/06/29<?php
/**
* غیرفعالسازی کامل پروتکل XML-RPC و حذف هدر مربوطه
*/
add_filter( 'xmlrpc_enabled', '__return_false' );
// حذف متاتگ و هدر XML-RPC از خروجی سایت
remove_action( 'wp_head', 'rsd_link' );
add_filter( 'wp_headers', function( $headers ) {
unset( $headers['X-Pingback'] );
return $headers;
} );
کد را کجا قرار دهیم؟ (Placement Guide)
در انتهای فایل functions.php قالب فعال یا در مسیر wp-content/mu-plugins/disable-xmlrpc.php قرار دهید.
این کد چگونه کار میکند؟ (How it Works)
هوک xmlrpc_enabled با بازگرداندن مقدار false هر درخواستی به فایل xmlrpc.php را لغو کرده و با حذف هدرهای rsd_link و X-Pingback کاوش این سرویس را متوقف میکند.
چه زمانی از این کد استفاده کنیم؟ (Use Cases)
در تمام وبسایتهای وردپرسی که از اپلیکیشنهای بسیار قدیمی موبایل وردپرس متکی به xmlrpc استفاده نمیکنند.
چه زمانی نباید از این کد استفاده کنیم؟ (Anti-patterns)
تنها در صورتی که اپلیکیشن یا سرویسی قدیمی دارید که اختصاصاً به xmlrpc.php نیاز دارد (امروزه REST API جایگزین کامل آن است).
پیشنیازهای اجرا
وردپرس ۳.۵ به بالا.
نحوه تست و اطمینان از عملکرد
به آدرس https://site.com/xmlrpc.php بروید؛ پیام XML-RPC server accepts POST requests only باید مسدود شود یا با ارسال پکت تستی خطای 403 بازگردد.
نحوه بازگردانی سریع (Rollback)
کد را از functions.php پاک کنید.
خطاهای رایج و راهحل رفع
تداخل احتمالی با افزونههای بسیار قدیمی متصل به جتپک (Jetpack).
ملاحظات و نکات امنیتی
جلوگیری از حملات Brute-Force چندگانه با استفاده از متد system.multicall در xmlrpc.
تاثیر بر سرعت و پرفورمنس
صرفهجویی شدید در ترافیک شبکه و اتصالات پایگاه داده در برابر باتهای مخرب.