مشکل امنیتی xmlrpc وردپرس

مشکل امنیتی xmlrpc وردپرس چیست و چگونه آن را غیرفعال کنیم؟

پاسخ سریع برای گوگل (Featured Snippet):
فایل xmlrpc.php یکی از قابلیت‌های قدیمی وردپرس است که امکان برقراری ارتباط از راه دور را فراهم می‌کند. اما به دلیل نداشتن محدودیت روی تعداد درخواست‌ها، به ابزاری عالی برای حملات دیکشنری (Brute Force) و حملات حملات غیرمستقیم (DDoS) تبدیل شده است. اگر از اپلیکیشن موبایل وردپرس یا سرویس Jetpack استفاده نمی‌کنید، بهترین کار بستن کامل این فایل از طریق .htaccess یا افزونه است.

خلاصه مدیریتی: ساختار و خطرات XML-RPC

📡

کارکرد اصلی
اتصال اپلیکیشن‌های موبایل و انتشار محتوا از راه دور

⚠️

تهدید اصلی
حملات حدس کلمه عبور و فشار شدید به سرور

🛡️

راه‌حل پیشنهادی
بستن دسترسی از طریق فایل htaccess یا کانفیگ Nginx

🚀

جایگزین مدرن
استفاده از WordPress REST API که بسیار ایمن‌تر است

فهرست بخش‌های این مقاله:

  • فایل xmlrpc.php چیست و چه وظیفه‌ای دارد؟
  • چرا فایل XML-RPC یک مشکل امنیتی بزرگ است؟
  • تست فعال بودن xmlrpc در سایت
  • روش‌های غیرفعال کردن xmlrpc.php (کاملاً عملی)
  • مقایسه XML-RPC و REST API
  • راهنمای عیب‌یابی سریع (Troubleshooting)
  • سوالات متداول (FAQ)

وردپرس سیستم‌عامل محبوب وب است. اما همین محبوبیت باعث شده که هکرها و ربات‌های مخرب مدام به دنبال پیدا کردن راه‌های نفوذ به آن باشند. یکی از قدیمی‌ترین و محبوب‌ترین ورودی‌ها برای نفوذ، فایل xmlrpc.php است. در دنیای امروزی، حوزه امنیت وب‌سایت بسیار پیچیده‌تر شده و استفاده از قابلیت‌های قدیمی و بدون حفاظت، ریسک عظیمی دارد.

فایل xmlrpc.php چیست و چه وظیفه‌ای دارد؟

مشکل امنیتی xmlrpc وردپرس — تصویر 1

عبارت XML-RPC مخفف XML Remote Procedure Call است. این پرتکل به برنامه‌های خارجی اجازه می‌دهد تا از راه دور با وردپرس شما صحبت کنند. به عنوان مثال، در سال‌های گذشته اگر می‌خواستید با اپلیکیشن موبایل وردپرس روی سایت خود پست بگذارید، یا از ابزارهایی مانند Windows Live Writer استفاده کنید، این ارتباط از طریق فایل XML-RPC برقرار می‌شد.

همچنین سیستم Pingback و Trackback که برای آگاه‌سازی سایر وبلاگ‌ها از لینک دادن به آن‌ها استفاده می‌شد، کاملاً وابسته به این فایل بود. تا قبل از نسخه ۳.۵ وردپرس، این قابلیت به‌صورت پیش‌فرض خاموش بود. اما از نسخه ۳.۵ به بعد، تیم وردپرس تصمیم گرفت آن را به‌صورت پیش‌فرض برای همه سایت‌ها فعال کند تا اتصال ابزارها ساده‌تر شود.

چرا فایل XML-RPC یک مشکل امنیتی بزرگ است؟

مشکل امنیتی xmlrpc وردپرس — تصویر 2

مشکل اصلی این فایل در عدم وجود محدودیت نرخ درخواست‌ها (Rate Limiting) و قابلیت متد ترکیبی (system.multicall) است. همین دو موضوع ساده به هکرها اجازه می‌دهد مانورهای بسیار خطرناکی روی سایت شما اجرا کنند.

۱. حملات دیکشنری و بروت فورس پیشرفته (Brute Force)

در فرم ورود معمولی وردپرس (wp-login.php)، اگر هکر بخواهد هزار کلمه عبور را تست کند، باید هزار بار صفحه را رفرش کند و سیستم‌های امنیتی خیلی سریع آی‌پی او را مسدود می‌کنند. اما با استفاده از ویژگی system.multicall در xmlrpc، هکر می‌تواند تنها با ارسال یک درخواست HTTP، بیش از صدها نام کاربری و رمز عبور متفاوت را یکجا بررسی کند! این کار شناسایی حمله را بسیار سخت می‌کند.

۲. حملات منع خدمت یا DDoS از طریق Pingback

قابلیت پینگ‌بک در XML-RPC به سایت‌ها اجازه می‌دهد به یکدیگر اطلاع دهند که به هم لینک داده‌اند. هکرها می‌توانند با سوءاستقاده از این ویژگی، هزاران سایت وردپرسی دارای xmlrpc را تحریک کنند تا به یک سایت هدف درخواست بفرستند. در این حالت، سایت شما بدون اینکه روح‌تان خبر داشته باشد، وارد یک حمله DDoS علیه یک سایت دیگر می‌شود و منابع سرور خودتان هم فلج می‌شود.

اگر پس از بررسی متوجه شدید که زیر فشار این نوع حملات بوده‌اید، بهتر است حتماً نسبت به بازنشانی کلمه عبور مدیر اقدام کرده و دسترسی‌های ناخواسته را مسدود کنید.

تست فعال بودن xmlrpc در سایت

برای برسی اینکه آیا این فایل در سایت شما باز است یا خیر، ساده‌ترین راه این است که آدرس سایت خود را همراه با /xmlrpc.php در مرورگر وارد کنید. برای مثال:

https://yourdomain.com/xmlrpc.php

اگر با پیامی مانند زیر مواجه شدید، یعنی این سرویس روی سایت شما فعال است و باید برای بستن آن دست به کار شوید:

XML-RPC server accepts POST requests only.

روش‌های غیرفعال کردن xmlrpc.php (کاملاً عملی)

برای بستن این روزنه امنیتی چند راهکار اصلی وجود دارد. پیشنهاد ما همیشه استفاده از روش‌های در سطح سرور است چون از پردازش اضافی توسط وردپرس جلوگیری می‌کند. اما پیش از ایجاد هرگونه تغییر در فایل‌های ریشه، حتماً یک پشتیبان‌گیری کامل از سایت انجام دهید تا در صورت بروز هرگونه اشتباه، سایت دچار اختلال نشود.

روش اول: غیرفعال‌سازی از طریق فایل htaccess. (پیشنهادی برای وب‌سرور لایت‌اسپید و آپاچی)

کافیست وارد کنترل‌پنل هاست (سی‌پنل یا دایرکت‌پنل) شده و فایل .htaccess موجود در پوشه اصلی سایت (public_html) را ادیت کنید. سپس کد زیر را به انتهای آن اضافه نمایید:

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

این کد باعث می‌شود وب‌سرور اصلاً اجازه پردازش درخواست‌های این فایل را نداده و خطای 403 Forbidden بازگرداند. این کار بخشی از مهم‌ترین کانفیگ‌های امنیتی در سطح سرور به‌شمار می‌رود.

روش دوم: مسدود کردن در وب‌سرور Nginx

اگر از وب‌سرور انجین‌ایکس (Nginx) استفاده می‌کنید، باید بلاک زیر را در فایل پیکربندی سرور (سایت مربوطه) قرار دهید و وب‌سرور را ری‌لود کنید:

location = /xmlrpc.php {
    deny all;
    access_log off;
    log_not_found off;
}

روش سوم: بستن XML-RPC با کد در functions.php

اگر دسترسی به هاست ندارید، می‌توانید با اضافه کردن یک فیلتر ساده به فایل functions.php پوسته فعال خود، اجرای آن را غیرفعال کنید:

add_filter(‘xmlrpc_enabled’, ‘__return_false’);

نکته: این روش درخواست‌ها را مسدود نمی‌کند، بلکه فقط عملکرد وردپرس را غیرفعال می‌سازد. بنابراین همچنان منابع سرور برای پاسخ به درخواست درگیر خواهد شد.

روش چهارم: استفاده از افزونه‌های امنیتی

اگر علاقه‌ای به کدنویسی ندارید، افزونه‌های زیر به راحتی این کار را برای شما انجام می‌دهند:

  • Disable XML-RPC: افزونه‌ای فوق‌العاده سبک که تنها کارش بستن این سرویس است.
  • iThemes Security / Wordfence: هر دو افزونه قدرتمند امنیتی، گزینه‌ای اختصاصی برای مسدودسازی XML-RPC دارند.

هنگام نصب ابزارهای جانبی، بهتر است به سلامت کدهای آن‌ها توجه داشته باشید. می‌توانید گزینه‌های مختلف را با بررسی ارزیابی امنیت پلاگین‌ها انتخاب کنید تا تداخلی روی سایت ایجاد نشود.

مقایسه XML-RPC و REST API

شاید از خود بپرسید پس جایگزین این سیستم قدیمی چیست؟ وردپرس از نسخه ۴.۷ به بعد به‌صورت رسمی از REST API رونمایی کرد که بسیار امن‌تر، مدرن‌تر و سریع‌تر است. در ساخت استاندارد در حوزه طراحی و توسعه وب، پروتکل‌های مدرن جایگزین کدهای قدیمی شده‌اند.

ویژگی XML-RPC (قدیمی) REST API (مدرن)
فرمت داده XML (سنگین و پیچیده) JSON (سبک و سریع)
سطح امنیت ضعیف (آسیب‌پذیر در برابر بروت‌فورس) بالا (احراز هویت استاندارد OAuth / Application Passwords)
پشتیبانی از سیستم‌های جدید محدود و رو به منسوخ شدن کاملاً استاندارد و همه‌گیر
تأثیر روی سرعت سرور مصرف بالا هنگام حملات بهینه‌سازی شده و بسیار سبک

کاهش بار اضافی روی سرور، به‌طور غیرمستقیم بر سرعت بارگذاری و در نتیجه بهینه‌سازی برای موتورهای جستجو اثر مثبت دارد. تیم رسانه آموزشی مهیار هاب نیز بستن کامل XML-RPC را به تمام وب‌سایت‌های وردپرسی توصیه می‌کند.

راهنمای عیب‌یابی سریع (Troubleshooting)

گاهی اوقات پس از غیرفعال کردن فایل xmlrpc ممکن است با چند چالش کوچک روبرو شوید. در جدول زیر راه‌حل‌های سریع ارائه شده است:

مشکل ۱: قطع شدن اتصال افزونه Jetpack

علت: جت‌پک برای برخی عملکردهای خود به XML-RPC وابسته است.
راه‌حل: اگر اصرار به استفاده از جت‌پک دارید، به‌جای بستن کامل فایل، فقط دسترسی به متد pingback را ببندید یا از افزونه‌هایی مانند Control XML-RPC استفاده کنید تا فقط آی‌پی‌های جت‌پک مجاز باشند.
مشکل ۲: بروز خطای 500 پس از ویرایش htaccess

علت: وجود اشتباه تایپ در دستورات فایل htaccess.
راه‌حل: کدهای اضافه شده را پاک کنید و دوباره دستورات را با دقت کپی و پیست نمایید.
مشکل ۳: عدم کارکرد اپلیکیشن موبایل وردپرس

علت: برنامه اپلیکیشن برای احراز هویت از این فایل استفاده می‌کند.
راه‌حل: به‌جای اپلیکیشن قدیم، از مرورگر موبایل برای ورود به پیشخوان استفاده کنید یا رمزهای عبور اپلیکیشن (Application Passwords) بر پایه REST API را فعال سازید.

رعایت این اصول در کنار اجرای توصیه‌های کلیدی حفاظت از وردپرس امنیت پایدار وب‌سایت شما را تضمین خواهد کرد.

سوالات متداول (FAQ)

آیا غیرفعال کردن xmlrpc.php باعث آسیب به سئو سایت می‌شود؟

خیر، به هیچ وجه. ربات‌های موتورهای جستجو مانند گوگل از طریق فایل‌های sitemap.xml و لینک‌های شفاف صفحات شما را بررسی می‌کنند و هیچ نیازی به XML-RPC ندارند. حتی بستن آن باعث آزاد شدن منابع سرور و افزایش سرعت سایت می‌شود.

آیا با آپدیت وردپرس، فایل xmlrpc دوباره فعال می‌شود؟

اگر مسدودسازی را از طریق فایل .htaccess یا وب‌سرور انجام داده باشید، آپدیت‌های وردپرس هیچ تغییری در آن ایجاد نمی‌کنند و بسته‌ماندن آن دائمی خواهد بود.

آیا افزونه‌های ایرانی یا درگاه‌های پرداخت با بستن XML-RPC از کار می‌افتند؟

خیر. درگاه‌های پرداخت و اکثر افزونه‌های مدرن از cURL و REST API برای ارتباط با سرورهای مقصد استفاده می‌کنند و نیازی به فایل XML-RPC ندارند.

Table of Contents

آخرین نوشته‌ها