به عنوان مدیر یک وبسایت وردپرسی، امنیت زیرساخت و پایداری سرور همواره از دغدغههای اصلی شماست. فایل xmlrpc.php یکی از قدیمیترین اجزای وردپرس است که هدف اولیه آن ایجاد پل ارتباطی میان سیستم مدیریت محتوای شما و اپلیکیشنها یا سرویسهای شخص ثالث بوده است.
با این حال، امروزه با ظهور فناوریهای نوین مانند REST API و تغییر الگوهای مدیریت محتوا، این فایل به یکی از نقاط آسیبپذیر امنیتی تبدیل شده است. در این مقاله تخصصی از وبلاگ سابین سرور، قصد داریم به کالبدشکافی ساختار XML-RPC، بررسی خطرات آن و آموزشهای فنی دقیق برای غیرفعال کردن xmlrpc.php بپردازیم.
XML-RPC وردپرس چیست و چه کاربردی دارد؟
پروتکل XML-RPC یک رابط برنامهنویسی کاربردی مبتنی بر پروتکل HTTP و ساختار دادهای XML است که به وردپرس اجازه میدهد تا با سیستمهای خارجی تبادل اطلاعات کند. پاسخ کوتاه این است که این پروتکل برای ارسال پست از راه دور، استفاده از اپلیکیشن موبایل وردپرس و اتصال به سرویسهایی مثل Windows Live Writer طراحی شده بود.
از منظر تاریخی، پیش از فراگیر شدن پنلهای مدیریتی پیشرفته و سرعت بالای اینترنت، نویسندگان و وبلاگنویسان ترجیح میدادند محتوای خود را از طریق نرم افزارهای دسکتاپ یا اپلیکیشنها نوشته و مستقیماً روی سایت منتشر کنند. فایل xmlrpc.php دقیقاً مسئولیت دریافت این درخواستهای XML، پردازش احراز هویت و اعمال تغییرات در دیتابیس را بر عهده داشت.
اما امروزه با وجود REST API، حضور این فایل قدیمی در بیشتر سایتها توجیه فنی خود را از دست داده و عملاً به یک چالش امنیتی مبدل شده است که نیازمند توجه ویژه مهندسان شبکه و مدیران هاست وردپرس است.
چرا XML-RPC میتواند امنیت وبسایت وردپرسی را به خطر بیندازد؟
فایل xmlrpc.php به دلیل ماهیت پردازشی خود، دو آسیبپذیری و تهدید بزرگ یعنی حملات Brute Force گسترده و حملات DDoS مبتنی بر پینگبک (Pingback) را به وبسایت تحمیل میکند. در ادامه خطرات ساختاری این پروتکل را بررسی میکنیم.
یکی از مهمترین قابلیتهای این پروتکل، امکان ارسال درخواستهای دستهجمعی یا اصطلاحاً Multi-call است. یک هکر میتواند با ارسال تنها یک درخواست HTTP POST حاوی صدها یا هزاران ترکیب نام کاربری و رمز عبور به فایل xmlrpc.php، سیستم احراز هویت وردپرس را دور بزند و تلاشهای بروت فورس را با سرعتی غیرقابل تصور اجرا کند.
این در حالی است که فرم لاگین معمولی وردپرس (wp-login.php) به راحتی با کدهای کپچا یا محدودکنندههای تلاش ناموفق محافظت میشود، اما فایل XML-RPC بسیاری از این لایههای امنیتی را دور میزند.
حملات بروت فورس و دیداس روی xmlrpc.php چگونه انجام میشوند؟
حملات بروت فورس و دیداس روی فایل xmlrpc.php از طریق سوءاستفاده از متد system.multicall رخ میدهند که به مهاجم اجازه میدهد در قالب یک درخواست واحد، صدها تلاش برای ورود انجام دهد بدون اینکه سیستمهای امنیتی ساده متوجه شوند.
علاوه بر حملات حدس رمز عبور، قابلیت Pingback و Trackback در XML-RPC به شدت مستعد سوءاستفاده در حملات محرومیت از سرویس (DDoS) است. هکرها میتوانند با ارسال درخواستهای جعلی به هزاران سایت وردپرسی دیگر و هدایت آنها به سوی سایت هدف، یک ترافیک عظیم و مخرب ایجاد کنند که منابع سرور میزبان را به طور کامل فلج میکند.
برای آشنایی بیشتر با مدیریت منابع و بهینهسازی سرور، مطالعه مقاله wp-cron چیست و چرا میتواند وردپرس را کند کند؟ میتواند دیدگاه جامعی به شما بدهد.
چگونه بفهمیم که سایت ما مورد حمله XML-RPC قرار گرفته است؟
تشخیص حملات به فایل xmlrpc.php از طریق بررسی ارور لاگهای سرور، مانیتورینگ مصرف منابع پردازنده و رصد فایلهای لاگ دسترسی وبسایت امکانپذیر است.
اگر متوجه افت ناگهانی سرعت سایت، افزایش بیسابقه مصرف CPU و RAM، یا پر شدن حجم لاگهای سرور شدید، باید فایل access.log وبسایت خود را بررسی کنید. تکرار بیش از حد خطوط مربوط به درخواستهای POST به مسیر /xmlrpc.php نشانه بارز یک حمله سازمانیافته است.
در چنین شرایطی، اگر سایت شما روی سرویسهای غیراستاندارد میزبانی شود، به سرعت با Suspend شدن مواجه خواهید شد. از این رو، استفاده از زیرساختهای پایدار مانند خرید هاست وردپرس سابین سرور به همراه فایروال های قدرتمند لبه شبکه، نقش کلیدی در دفع این حملات دارد.
چه زمانی نباید XML-RPC را غیرفعال کنیم؟
غیرفعال کردن xmlrpc.php در صورتی که از اپلیکیشن موبایل وردپرس، افزونههای خاص انتشار خودکار، یا سیستمهای اتوماسیون متکی بر این پروتکل استفاده کنید، ممکن است باعث اختلال در عملکرد سایت شود.
پیش از اقدام برای مسدودسازی این فایل، باید بررسی کنید آیا سیستم شما به آن وابسته است یا خیر. به عنوان مثال، اگر از اپلیکیشن رسمی وردپرس روی گوشی هوشمند خود برای مدیریت نوشتهها استفاده میکنید یا برخی پلاگینهای سئو و انتشار محتوای ریموت بر پایه این پروتکل کار میکنند، بستن کامل آن ارتباط شما را قطع خواهد کرد.
با این حال، امروزه تقریبا تمام افزونههای مدرن از REST API استفاده میکنند و وابستگی به XML-RPC به کمتر از یک درصد رسیده است.
برای درک بهتر تفاوتها، پیشنهاد میشود مقاله REST API وردپرس چیست و آیا غیرفعال کردن آن باعث افزایش امنیت میشود؟ را مطالعه فرمایید.
| ویژگی / پارامتر | پروتکل XML-RPC | پروتکل مدرن REST API |
|---|---|---|
| ساختار داده و پردازش | مبتنی بر XML و سنتی | مبتنی بر JSON و بسیار بهینهتر |
| امنیت و احراز هویت | آسیبپذیر در برابر بروت فورس و حملات Multi-call | پشتیبانی از توکن، OAuth و کوکیهای امن |
| میزان مصرف منابع سرور | بالا و مستعد سوءاستفاده در حملات DDoS | بهینه، کنترلشده و قابل محدودسازی |
| پشتیبانی نرمافزارهای مدرن | منسوخ شده و در حال کنار گذاشته شدن | استاندارد اصلی وردپرس و تمامی اپلیکیشنها |
چگونه میتوانیم اقدام به غیرفعال کردن xmlrpc.php از طریق فایل .htaccess کنیم؟
غیرفعال کردن xmlrpc.php از طریق فایل .htaccess یکی از سادهترین و مؤثرترین روشها برای سرورهای وب آپاچی و لایت اسپید است که دسترسی مستقیم به این فایل را در لایه وبسفر مسدود میکند.
برای انجام این کار، کافی است به کنترل پنل هاست خود (مانند دایرکت ادمین یا سیپنل) مراجعه کرده، فایل منیجر را باز کرده و در روت اصلی وردپرس (پوشه public_html) به دنبال فایل .htaccess بگردید. قطعه کد زیر را در انتهای این فایل اضافه کنید تا هرگونه درخواست ورودی به این فایل با خطای دسترسی غیرمجاز مواجه شود:
# Block WordPress xmlrpc.php requests
Order allow,deny
Deny from all
این روش تضمین میکند که هیچ اسکریپت مخربی حتی موفق به پردازش اولیه توسط PHP نخواهد شد، زیرا وبسرور در همان لایه اول درخواست را رد میکند.
چگونه فایل xmlrpc.php را در وبسرور Nginx غیرفعال کنیم؟
غیرفعال کردن xmlrpc.php در وبسرور Nginx از طریق ویرایش فایل کانفیگ دامین در مسیر سرور و افزودن دستورات مسدودسازی انجام میشود تا از پردازش این فایل جلوگیری گردد.
اگر وبسرور سایت شما Nginx است (که به دلیل سرعت بالا در بسیاری از هاستهای حرفهای استفاده میشود)، فایل .htaccess عملاً کارایی ندارد. در این حالت باید به کانفیگ بلاک سرور Nginx خود دسترسی داشته باشید (معمولاً در مسیر /etc/nginx/conf.d/ یا تنظیمات پنل) و بلاک زیر را درون تنظیمات سرور مجازی یا اختصاصی خود قرار دهید:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
پس از افزودن این کد، دستور nginx -t را برای تست صحت سینتکس اجرا کرده و سپس سرویس Nginx را ری استارت کنید تا تغییرات اعمال شوند.
آیا استفاده از افزونههای وردپرسی برای غیرفعال کردن xmlrpc.php راه حل مناسبی است؟
استفاده از افزونههای امنیتی وردپرس برای غیرفعال کردن xmlrpc.php گزینهای مناسب برای کاربران مبتدی است، اما روشهای سطح سرور پایداری و امنیت بیشتری به همراه دارند.
افزونههای امنیتی معروفی مانند Wordfence، iThemes Security یا افزونههای اختصاصی غیرفعالسازی XML-RPC میتوانند با افزودن توابع فیلترینگ در کدهای وردپرس، این پروتکل را از کار بیندازند.
قطعه کد زیر نمونهای از هوک وردپرسی است که میتوان آن را در فایل functions.php قالب قرار داد:
add_filter('xmlrpc_enabled', '__return_false');
با این حال، توجه داشته باشید که این روش در لایه PHP اجرا میشود؛ یعنی درخواست ابتدا وارد وردپرس شده و سپس رد میشود. در حالی که روشهای فایل .htaccess یا کانفیگ Nginx در لایه وبسرور جلوی درخواست را میگیرند که برای بهینهسازی منابع سرور بسیار ایدهآلتر است.
پشتیبانی و بهینهسازی مداوم پایداری سایت، نقش مستقیمی در جلوگیری از افت رتبه سئو و تجربه کاربران دارد.
چگونه عیبیابی کنیم اگر پس از غیرفعال کردن xmlrpc.php با خطا مواجه شدیم؟
عیبیابی پس از غیرفعال کردن xmlrpc.php شامل بررسی ارور لاگهای مرورگر (Console)، بررسی فایل error_log هاست و تست اتصال پلاگینهای ریموت است.
اگر پس از مسدودسازی این فایل متوجه شدید که برخی افزونههای ارتباطی، برنامههای انتشار محتوای ریموت یا اتصال اپلیکیشنها با خطا مواجه شدهاند، باید بررسی کنید که آیا آن سرویس واقعاً به XML-RPC وابسته است یا خیر. در صورت نیاز میتوانید به جای مسدودسازی کامل، با استفاده از ماژولهای امنیتی فایروال سرور (مانند ModSecurity) فقط حملات متد system.multicall را فیلتر کنید تا سایر قابلیتهای مشروع دستنخورده باقی بمانند.
برای عیبیابی دقیقتر خطاهای احتمالی، بررسی مقاله چگونه AI میتواند خطاهای 500 و مشکلات سایت را تحلیل کند؟ راهنمای جامع و فنی بسیار راهگشا خواهد بود.
نتیجهگیری نهایی
در این مقاله جامع بررسی کردیم که پروتکل XML-RPC در وردپرس چیست، چه خطرات امنیتی به همراه دارد و چرا غیرفعال کردن xmlrpc.php به عنوان یک اقدام استاندارد امنیتی برای وبسایتهای امروزی توصیه میشود. با توجه به اینکه اکثر سایتهای مدرن از REST API استفاده میکنند، حضور این فایل قدیمی تنها سطح حمله (Attack Surface) سایت شما را در برابر حملات بروت فورس و دیداس افزایش میدهد.
اعمال تنظیمات مسدودسازی در لایه وبسرور (htaccess یا Nginx) امنترین و بهینهترین روش برای صیانت از منابع سرور و حفظ امنیت سایت وردپرسی شماست.



