برنامه‌نویسی

کارایی Xmlrpc.php در وردپرس چیست و چرا باید آن را غیرفعال کنیم؟


۱۶ مرداد ۱۳۹۹
xmlrpc.php در wordpress

وردپرس همیشه دارای ویژگی‌های داخلی بوده و یکی از امکاناتی که برای کاربران خود به‌وجود آورده، تعامل با سایت وردپرسی از راه دور است. باید با این حقیقت روبرو شد که گاهی اوقات، لازم بوده که به وب‌سایت خود دسترسی پیدا کنید اما رایانه شما، همراه‌تان نبوده است. برای مدت طولانی راه‌حل برای این موضوع، فایل xmlrpc.php بوده است. اما در سال‌های اخیر، این فایل به یک آفت تبدیل شده تا اینکه یک راه‌حل مفید باشد!

در این مقاله درباره چیستی و چراییِ وجود فایل xmlrpc.php می‌خوانیم. همچنین درباره مسائل امنیتی رایج که ناشی از وجود این فایل است و پَچ کردن آنها صحبت می‌کنیم.

Xmlrpc.php چیست؟

XML-RPC یک ویژگی وردپرس است که امکان انتقال داده‌ها را با پروتکل HTTP به‌وجود آورده و XML را به‌ عنوان مکانیزم encoding انتخاب کرده است.

از آنجایی که وردپرس یک سیستم بسته نیست و گاهی اوقات نیاز به برقراری ارتباط با سایر سیستم‌ها دارد، به‌دنبال این بوده تا ارتباط با سایر سیستم‌ها را ممکن سازد. به عنوان مثال، شما می‌خواهید یک پست در وبسایت خود ارسال کنید و کامپیوترتان را فراموش کرده‌اید، حال می‌خواهید این کار را با تلفن هوشمند خود انجام دهید، برای انجام این‌کار می‌توانید از ویژگی remote access که در فایل xmlrpc.php فعال شده است، استفاده کنید.

ویژگی‌های اصلی که xmlrpc.php فعال می‌کند، به شما این امکان را می‌داد که از طریق تلفن همراه خود به وبسایت متصل شوید، از سایت‌های دیگر trackback و pingback بگیرید و برخی از عملکردهای مرتبط با افزونه Jetpack را در اختیار شما قرار می‌دهد.

چرا Xmlrpc.php ساخته شد و چگونه مورد استفاده قرار گرفت؟

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

راه‌حل در آن زمان، ایجاد یک offline blogging client بود، به این صورت که شما محتوای خود را می‌نوشتید و سپس برای انتشار آن محتوا، به بلاگ خود متصل می‌شدید. این ارتباط از طریق XML-RPC انجام‌پذیر بود. با وجود فریم‌ورک اولیه XML-RPC، برنامه‌ها از همین ارتباط استفاده می‌کردند تا به افراد اجازه دهند از سایر دستگاه‌ها به سایت‌های وردپرسی خود وارد شوند.

XML-RPC در زمان حال

در سال 2008، با حضور نسخه 2.6 وردپرس، گزینه‌ای برای فعال و غیرفعال کردن XML-RPC به‌وجود آمد. اما با انتشار برنامه وردپرس برای iPhone، پشتیبانی از XML-RPC به‌طور پیش‌فرض فعال است و هیچ گزینه‌ای برای غیرفعال کردن آن در تنظیمات، وجود ندارد. این موضوع تا به امروز، صادق است.

بااین‌حال، عملکرد این فایل با گذشت زمان بسیار کاهش یافته است و سایز کلی فایل xmlrpc.php از 83kb به 3kb کاهش یافته، همچنین نقش آن‌هم کم‌تر شده است.

XML-RPC در آینده

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

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

چرا باید Xmlrpc.php را غیرفعال کنید؟

بزرگ‌ترین مسائل مربوط به XML-RPC، نگرانی‌های امنیتی هستند. این مشکل‌ها به‌طور مستقیم به خود XML-RPC برنمی‌گردد اما در عوض با استفاده از این فایل، راهی برای حمله Brute Force به سایت شما، وجود دارد.

مطمئنا می‌توانید با رمزهای عبور فوق‌العاده قوی و افزونه‌های امنیتی وردپرس از این حمله‌ها جلوگیری کنید. اما بهترین حالت برای محافظت از وبسایت‌تان، غیرفعال کردن XML-RPC است.

از گذشته تابه‌حال، دو ضعف امنیتی در XML-RPC وجود داشته است که اکسپلویت شده‌اند. اولین مورد، استفاده از حمله‌های Brute Force برای ورود به وبسایت وردپرسی شما بوده است که در این حمله، یک مهاجم سعی خواهد کرد با استفاده از ترکیب‌های مختلف نام کاربری و رمزعبورها با استفاده از xmlrpc.php، به سایت شما دسترسی پیدا کند. آنها می‌توانند به طور موثر از یک دستور، برای آزمایش صدها رمزعبور مختلف استفاده کنند. این موضوع به مهاجمین اجازه می‌دهد تا ابزارهای امنیتی که این حمله‌ها را شناسایی و آنها را مسدود می‌کنند، دور بزنند (یا به عبارت دیگر Bypass کنند).

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

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

اگر با پیغام موفقیت آمیز روبرو شدید، می‌توانید با یکی از روش‌های زیر xmlrpc.php را غیرفعال کنید.

روش اول: غیرفعال کردن Xmlrpc.php از طریق پلاگین

یکی از راه‌حل‌های آسان برای غیرفعال کردن XML-RPC، استفاده از پلاگین است.

به سادگی به بخش Plugins > Add New در داشبورد وردپرسی خود بروید. Disable XML-RPC را جستجو و سپس آن را نصب کنید.

غیرفعال کردن xmlrpc از طریق پلاگین

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

اگر می‌خواهید فقط قابلیت‌های خاصی از XML-RPC را خاموش کنید و بتوانید از دیگر قابلیت‌های آن در دیگر پلاگین‌ها استفاده کنید، باید از افزونه‌های دیگری استفاده کنید:

  • Stop XML-RPC Attack: با استفاده از این پلاگین، می‌توانید از تمام حملاتی که از XML-RPC نشات می‌گیرند، جلوگیری کنید. اما همچنان برای پلاگین‌هایی مانند Jetpack و سایر ابزارهای اتوماتیک، دسترسی به فایل xmlrpc.php را ایجاد کنید.
  • Control XML-RPC Publishing: این پلاگین برای شما این امکان را به‌وجود می‌آورد تا کنترل و استفاده از گزینه‌ی انتشار از راه دور از طریق xmlrpc.php را مدیریت کنید.

روش دوم: غیرفعال کردن دستی Xmlrpc.php

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

فایل .htaccess خود را باز کنید، در صورتی که این فایل را پیدا نکردید، در بخش مدیریت فایل‌ها یا در FTP client خود، گزینه Show Hidden Files را فعال کنید و کدهای زیر را در فایل .htaccess قرار دهید.

#مسدود کردن درخواست‌های xmlrpc.php در وردپرس

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

در کدهای بالا، مقداز “xxx.xxx.xxx.xxx” را به آدرس IP که می‌خواهید به xmlrpc.php دسترسی داشته باشد، تغییر دهید.

جمع‌بندی

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

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

درحال‌حاضر، می‌توان انتظار داشت که ویژگی‌های XML-RPC با APIهای جدید وردپرس، در دسترس قرار بگیرند و قابلیت دسترسی از راه دور، بدون اینکه امنیت وبسایت درخطر قرار بگیرد، حفظ شود. همچنین، یکی از ایده‌های خوب برای حال‌ حاضر، حفاظت از حفره‌های امنیتی به‌وجود آمده توسط XML-RPC است.

منبع: https://www.hostinger.com/tutorials/xmlrpc-wordpress