SHET22
English

چگونه وردپرس را در مقابل حملات XML-RPC محافظت کنیم

چگونه وردپرس را در مقابل حملات XML-RPC محافظت کنیم

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

قبلش یه نکته رو بگیم که خیلی‌ها اشتباه می‌کنن: وردپرس ذاتاً ناامن نیست. بعضی‌ها که می‌خوان سیستم مدیریت محتوای اختصاصی خودشون رو بهتون بفروشن، وردپرس رو یه غول ناامن نشون می‌دن. ولی واقعیت اینه که امنیت یه چیز نسبیه و کاملاً بستگی به تنظیمات و سروری داره که روش کار می‌کنید. یعنی اگه یکی بره توی دیتاسنتر و هارد سرورتون رو بدزده، این دیگه تقصیر وردپرس نیست! پس بیاید با هم همین یه گوشه کوچیک ولی مهم رو امن کنیم.

XML-RPC چیست؟

فایل xmlrpc.php
فایل xmlrpc.php

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

مثلاً قدیم‌ترها که می‌خواستید با اپلیکیشن موبایل وردپرس پست منتشر کنید، همین XML-RPC وسط کار بود. کاربردیه، ولی مشکل اینجاست که اکثر ما اصلاً ازش استفاده نمی‌کنیم و همینجوری بی‌خودی روشن مونده.

فایل xmlrpc.php کجاست؟

این پروتکلی که گفتیم، از طریق یه فایل به اسم xmlrpc.php کار می‌کنه که درست توی پوشه اصلی سایتتون، یعنی همون public_html، نشسته. همین فایله که دروازه‌ی ورود این درخواست‌هاست. پس اگه بخوایم جلوی سوءاستفاده رو بگیریم، باید سراغ همین بریم.

اهمیت غیرفعال کردن فایل xmlrpc.php

حالا شاید بپرسید «خب که چی؟ بذار روشن باشه دیگه.» بذارید بگیم هکرها چطوری از این فایل سوءاستفاده می‌کنن تا قانع بشید:

معمولاً وقتی یه هکر بخواد از راه XML-RPC بهتون ضربه بزنه، دوتا کار می‌کنه:

اول اینکه وقتی سایتتون یه خطای دیتابیس می‌ده، طرف می‌تونه اطلاعات دقیق اون خطا رو بخونه و از توش سرنخ پیدا کنه. دوم هم اینکه با فرستادن پشت‌سرهم درخواست‌های POST /xmlrpc.php شروع می‌کنه به بمباران کردن سایتتون، که هم می‌تونه برای حمله brute-force باشه هم منابع سرورتون رو بخوره و سایتتون رو کند کنه.

و دقیقاً همینجاست که منطق ساده‌س: وقتی خودتون و اکثر سایت‌ها اصلاً از این پروتکل استفاده نمی‌کنید، چرا باید بذارید باز بمونه و دردسر درست کنه؟ ببندیدش بره پی کارش.

غیرفعال کردن فایل xmlrpc.php

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

روش اول: با فایل htaccess (برای سرورهای آپاچی)

این ساده‌ترین راهه. کافیه برید توی فایل‌منیجر هاستتون و فایل .htaccess رو باز کنید برای ویرایش. همون‌طور که گفتیم این فایل توی مسیر اصلی public_html سایتتونه.

حالا این کد رو بذارید توی خط اول فایل:

apache

<Files xmlrpc.php>
   order allow,deny
   deny from all
</Files>

به همین راحتی! دسترسی به فایل xmlrpc.php مسدود شد و دیگه هیچ‌کس نمی‌تونه بهش دست بزنه. 🙂

روش دوم: اگه از NGINX استفاده می‌کنید

اگه سرورتون روی NGINX بالا میاد، اول بهتون تبریک می‌گیم، چون احتمالاً یه سرور اختصاصی یا نیمه‌اختصاصی دارید و از این نظر یه سر و گردن بالاترید.

توی این حالت باید برید سراغ فایل /etc/nginx/nginx.conf و این کد رو داخل بلاک server { } بذارید:

nginx

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

اینجوری هم درخواست رد می‌شه، هم لاگ اضافی ثبت نمی‌شه که سرورتون رو شلوغ کنه. تمیز و تر و تمیز.

روش سوم: با افزونه (اگه اهل کدنویسی نیستید)

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

غیرفعال کردن فایل xmlrpc.php
غیرفعال کردن فایل xmlrpc.php

از کجا بفهمیم واقعاً بسته شده؟

حالا که کار رو انجام دادید، بیاید مطمئن شیم درست پیش رفته. خیلی راحته: آدرس دامنه‌تون/xmlrpc.php رو توی مرورگرتون باز کنید (مثلاً yoursite.com/xmlrpc.php).

اگه خطای ۴۰۳ یا ۴۰۴ گرفتید، یعنی همه چی درسته و دسترسی مسدود شده. کارتون عالی بود! ولی اگه صفحه باز شد و یه پیامی نشونتون داد، یعنی یه جای کار می‌لنگه و باید کدها رو دوباره چک کنید.

یه چند تا نکته آخر درباره امنیت وردپرس

قبل از اینکه تموم کنیم، یادتون باشه بستن XML-RPC فقط یه تیکه از پازله. همون‌طور که اول گفتیم، امنیت یه چیز نسبی و چندلایه‌س و به کل شرایط سرور و تنظیماتتون بستگی داره. یعنی نباید فکر کنید با بستن یه فایل، سایتتون نفوذناپذیر شده.

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

جمع‌بندی

خب، به آخر خط رسیدیم. کاری که کردیم خیلی ساده بود ولی تأثیرش کم نیست: یه دروازه‌ی پرخطر رو که اکثراً بی‌استفاده‌س بستیم و یکی از رایج‌ترین راه‌های نفوذ به وردپرس رو از کار انداختیم. حالا برید همین الان روی سایت خودتون امتحانش کنید و بعدش با تست کردن آدرس، خیالتون رو راحت کنید.

موفق و پیروز باشید. 🙂

سوالات متداول

آیا غیرفعال کردن XML-RPC به سایتم آسیب می‌زنه؟

برای اکثر سایت‌ها نه. مگه اینکه از سرویس یا اپلیکیشنی استفاده کنید که به این پروتکل نیاز داشته باشه (مثل بعضی اپ‌های موبایل قدیمی یا سرویس‌های خاص). اگه مطمئن نیستید، اول ببندیدش و اگه دیدید جایی از سایت به مشکل خورد، دوباره بازش کنید.

فرق روش htaccess با افزونه چیه؟

روش htaccess مستقیم و سبکه و هیچ باری روی سایتتون نمی‌ذاره، ولی نیاز داره یه‌کم با فایل‌ها کار کنید. افزونه راحت‌تره ولی یه بار اضافه روی سایتتونه. اگه اهل کد باشید، htaccess همیشه انتخاب بهتریه.

اگه از اپلیکیشن موبایل وردپرس استفاده کنم چی می‌شه؟

بعضی از قابلیت‌های قدیمی اپ موبایل به XML-RPC وابسته بودن. نسخه‌های جدیدتر بیشتر با REST API کار می‌کنن، ولی اگه دیدید بعد از بستن، اپتون درست کار نکرد، احتمالاً همینه و باید موقتاً بازش کنید.

نظر شما در این مورد چیه؟

  1. U345652۱۶ خرداد ۱۴۰۳

    سلام امیدوارم حالتون عالی باشه
    من زمانی که باد گوشی ادرس سایتم رو میزنم صفحه اصلی سایتم خطای 404 میده و داخل خطاهای بحرانی سایتم متن
    برخی از پرونده‌ها توسط وردپرس قابل نوشتن نیستند:
    xmlrpc.php
    وجود دارد این مشکل رو چطور میتونم حل کنم؟

  2. U331710۱۵ فروردین ۱۴۰۳

    سلام به جناب اقای راد عزیز و تیم زحمت کششون
    من مشکلی که دارم اینه اون خط رو وارد سی پنل میکنم ولی صفحه های سایتم به ارور 404 میخوره نمیدونم باید چیکار کنم اموزش تونم دیدم پیوند یکتا رو ذخیره تغییرات زدم ولی ارور 404 هیج تغییری نکرد
    ممنون میسم یخورده راهنماییم کنید

  3. U331710۱۵ فروردین ۱۴۰۳

    سلام به جناب اقای راد عزیز و تیم زحمت کششون
    من مشکلی که دارم اینه اون خط رو وارد سی پنل میکنم ولی صفحه های سایتم به ارور 404 میخوره نمیدونم باید چیکار کنم اموزش تونم دیدم پیوند یکتا رو ذخیره تغییرات زدم ولی ارور 404 هیج تغییری نکرد ممنون میسم یخورده راهنماییم کنید

  4. U331371۲۳ آبان ۱۴۰۲

    سلام روزتون بخیر
    من اخیرا متوجه شدم در قسمت پیشخوان وردپرسم قسمت مانیتور 404 به طرز عجیبی و بسیار زیاد تعداد url ها و تعداد گزارشات داره میره بالا وقتی روی ایکون نمودار بالای url ها کلیک کردم متوجه شدم %90 تمامیه این url ها از xmlrpc.php هست و از طریق این اموزش شما کد رو اضاف کردم اما همچنان ادامه داشت و حتی من xmlrpc.php رو در وردپرس غیر فعال کردم با یک اموزش دیگتون اما همچنان تعداد url ها از xmlrpc.php داره افزایش پیدا میکنه نمیدونم چیکار کنم ممنون میشم راهنماییم کنید

    • رضا راد۲۴ آبان ۱۴۰۲

      سلام طبیعیه. میتونید این آدرس رو ریدایرکت کنید. آموزش خطای ۴۰۴ رو توی سایت ببینید.

  5. U14500۱۹ خرداد ۱۳۹۹

    سلام وقت بخیر

    من هم کد شما رو تست کردم و هم در افزونه امنیت کامل وردپرس، بخش xmlrpc را غیرفعال کردم ولی هیچ تاثیری نداشت و این بخش اصلا مسدود نشده!
    به نظرتون مشکل از کجاست؟

    ممنون

    • تیم پشتیبانیتیم پشتیبانی۲۰ خرداد ۱۳۹۹

      سلام
      وب سرور شماnginx هست یا آپاچی؟

      • U14500۲۰ خرداد ۱۳۹۹

        سلام
        آپاچی هستش…

        • رضا راد۲۰ خرداد ۱۳۹۹

          مطمئن بشید کدها رو توی htaccess صحیح وارد کردید. اگر مطمئن هستید از مدیر سرور یا هاستینگ بخواید بررسی کنن

  6. U17509۱۹ خرداد ۱۳۹۹

    سلام و تشکر, ما روی سایت بررسی کردیم عبارت XML-RPC server accepts POST requests only نمایش داده می شود.
    آیا لازم است طبق راهنمایی شما عمل کنیم یا نیازی نیست کاری انجام شود؟
    جهت اطلاع افزونه وردفنس نصب شده است, آیا کافی می باشد؟

    • تیم پشتیبانیتیم پشتیبانی۱۹ خرداد ۱۳۹۹

      سلام
      بله باید انجام بدید

پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرس
پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرسآنلاین و پاسخگوی شما هستیم.آنلاین

در حال بارگذاری...

هر سوالی دارید بپرسید.پاسخگوی شما هستیم.