Retry
XML-RPC چیست

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

اما در سال های اخیر، این پرونده بیشتر از اینکه یک راه حل باشد، به یک آفت تبدیل شده است که می تواند آسیب پذیری هایی را در سایت وردپرس شما ایجاد کند و اکنون توسط WordPress REST API جایگزین شده است، که کاربرد بسیار بهتری دارد. در ادامه می خواهیم بررسی کنیم که xmlrpc.php چیست و چرا ایجاد شده است. همچنین موارد امنیتی مشترک ایجاد شده را در سایت وردپرس خود مرور و بررسی می کنیم.

XML-RPC چیست؟

XML-RPC یک پروتکل تماس از راه دور (RPC) است که از XML برای رمزگذاری تماس های خود و HTTP به عنوان مکانیزم حمل و نقل استفاده می کند. در اصل، XML-RPC  در اوایل وردپرس ساخته شد، جایی که در بهترین حالت اتصال اینترنت کند و پراکنده بود. در واقع، به جای نوشتن فعالانه پست های جدید از طریق رابط کاربری آنلاین وردپرس، پست ها به صورت غیر همزمان، آفلاین نوشته شده و سپس در سرور بارگذاری می شدند. php زبان برنامه نویسی است که روی دستگاه سرور اجرا می شود.

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

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

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

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

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

کاربرد XML-RPC چیست و چگونه کار می کند؟

همانطور که در ابتدا نیز گفته شد XML-RPC یک ویژگی است که امکان برقراری ارتباط بین وردپرس و سایر سیستم ها را فراهم می کند. XML-RPC قبل از وردپرس وجود داشته است و از این نرم افزار در وبلاگ نویسی b2 استفاده می شد که برای ایجاد WordPress در سال 2003 ارسال شده بود. کد پشت سیستم در پرونده ای به نام xmlrpc.php ، در دایرکتوری اصلی سایت ذخیره می شود و هنوز هم وجود دارد، حتی اگر XML-RPC عمدتاً قدیمی است.

در نسخه های اولیه وردپرس، XML-RPC  به طور پیش فرض خاموش می شد. اما از نسخه 3.5 به طور پیش فرض فعال شده است. دلیل اصلی این امر این بود که به برنامه موبایل وردپرس اجازه دهید با نصب وردپرس شما همگام شود.

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

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

کاربرد XML-RPC  چه می باشد و چگونه کار می کند؟

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

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

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

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

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

توسعه دهندگان برای رفع مشکلات مربوط به کدگذاری این ویژگی در گذشته تلاش زیادی کرده اند. با این حال ، همه افراد به این توانایی نیاز ندارند. بسیاری از جنبه های سیستم بسیار خوب کار می کنند و استفاده از آن ها در تلفن های هوشمند یا تبلت ها آسان است.

بزرگترین مسائل مربوط به XML-RPC نگرانی های امنیتی است که بوجود می آید. این مشکلات مستقیماً با XML-RPC نیستند، بلکه مربوط به نحوه استفاده از پرونده برای فعال کردن حمله بی رحمانه به سایت شما است. مطمئناً، می توانید با رمزهای عبور فوق العاده قوی و پلاگین های امنیتی وردپرس از سایت خود محافظت کنید. دو ضعف اصلی در XML-RPC وجود دارد که در گذشته مورد سو استفاده قرار گرفته است.

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

مورد دوم آفلاین کردن سایت ها از طریق حمله DDoS بود. هکرها از ویژگی pingback در وردپرس استفاده می کنند تا بلافاصله برای هزاران سایت پینگ بک ارسال کنند. این ویژگی در xmlrpc.php تقریباً بی پایان آدرس های IP را برای توزیع حمله DDoS به هکرها می دهد.

چگونه می توان تشخیص داد که XMLRPC فعال است و یا خیر؟

این چیزی است که به نظر می رسد گاهی باعث سردرگمی می شود. به یاد داشته باشید به طور پیش فرض XMLRPC از قبل فعال شده است و همیشه بعد از اتمام نصب وردپرس در سایت شما قرار می گیرد. بنابراین اگر از هر یک از منابع زیر برای غیرفعال کردن آن استفاده می کنید به سادگی تنظیمات خود را دوباره انجام دهید یا کد را پاک کنید تا دوباره فعال شود.

با این حال اگر XML-RPC (xmlrpc.php) را فعال کرده اید، به این معنی است که شما توانایی اجرای JetPack و ایجاد پست های وبلاگ از مشتری های تلفن همراه مانند آیفون را دارید.  چندین روش مختلف برای بررسی اینکه XML-RPC شما فعال است یا نه وجود دارد.

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

چگونه XML-RPC را غیرفعال کنیم؟

روش های مختلفی برای غیرفعال کردن و یا از بین بردن خطر این فایل وجود دارد که هرکدام نقاط قوت و ضعف خود را دارند. برای دیدن نحوه انجام مراحل غیرفعال کردن WordPress XML-RPC (xmlrpc.php) می توانید به موارد و روش های زیر نگاهی بیاندازید و مناسب ترین را انتخاب کنید. فراموش نکنید که قبل از انجام هرگونه اقدامی یک نسخه ی پشتیبان تهیه کنید.

حذف کامل فایل

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

از طریق .htaccess غیرفعال کنید.

به جای حذف کامل پرونده، مانند گزینه 1، در عوض فایل را نگه دارید، اما از دسترسی به آن توسط هرگونه فرآیند جلوگیری می کنید. در واقع، شما فایل را در قرنطینه قرار می دهید بنابراین نمی تواند علیه شما استفاده شود. برای شروع درخواست های xmlrpc.php وردپرس را مسدود کنید. پرونده .htaccess خود را باز کنید. برای یافتن این فایل ممکن است مجبور شوید فایل های پنهان شده خود را در مدیریت فایل یا سرویس گیرنده FTP خود روشن کنید. در داخل فایل .htaccess ، کد زیر را وارد کنید:

# 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 اجازه دسترسی دهید  این خط را کاملاً حذف کنید. با از بین بردن توانایی دسترسی به فایل، فایل xmlrpc.php خطرناک را از حالت عملیاتی حذف کرده اید اما هر میزبانی اجازه تغییر در پرونده های پیکربندی سیستم مانند .htaccess را نمی دهد.

غیر فعال کردن XML-RPC

3. از طریق Functions.php در فایل قالب وردپرس غیرفعال کنید.

با استفاده از این روش، به جای حذف کامل پرونده یا غیرفعال کردن آن با ویرایش فایل پیکربندی کلید سرور، از یک فایل وردپرس استفاده می کنید. این روش برای میزبانانی که دسترسی محدود دارند مناسب است و شما می توانید تمام عملکردهای خود را در درخت دایرکتوری وردپرس حفظ کنید بسیار عالی است. در این روش شما یک فیلتر اضافه کنید تا XMLRPC را غیرفعال کنید:

    add_filter( ‘xmlrpc_enabled’, ‘__return_false’ );

یک فیلتر برای غیرفعال کردن X-Pingback در عناوین وردپرس اضافه کنید:

  add_filter( ‘wp_headers’, ‘disable_x_pingback’ );

عملکرد را برای غیرفعال کردن تنظیم کنید:

  function disable_x_pingback( $headers ) {

تنظیم سرصفحه ها:

    unset( $headers[‘X-Pingback’] );

عناوین اصلاح شده را برگردانید:

    return $headers;

نسخه کامل غیرفعال کردن XMLRPC :

add_filter( ‘xmlrpc_enabled’, ‘__return_false’ );
add_filter( ‘wp_headers’, ‘disable_x_pingback’ );
function disable_x_pingback( $headers ) {    unset( $headers[‘X-Pingback’] );    return $headers;  }

اگر از قالب های پیش فرض استفاده می کنید، فایل functions.php را ویرایش کنید و سپس قالب را به روز کنید  تا از این طریق تغییرات کد نویسی شده شما اعمال شود و حذف شود.

به خاطر داشته باشید که حتی در بهترین روش ها نیز استفاده و به روزرسانی قالب ها به طور منظم ضروری هستند، بنابراین باید تغییرات خود را در قالب قرار دهید تا حتی در هنگام بروزرسانی قالب اصلی نیز حفظ شود. اگر در بازگرداندن موارد فوق خطایی انجام دهید، در هنگام کپی و جایگذاری مقداری از علائم نگارشی را حذف کنید. اگر می خواهید تک پست / صفحه را نیز غیرفعال کنید، موارد زیر را نیز اضافه کنید:

  add_filter(‘pings_open’, ‘__return_false’, PHP_INT_MAX);

4. از طریق Functions.php در پرونده های قالب وردپرس غیرفعال کنید.

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

  add_filter(‘xmlrpc_methods’, function () {  return [];

کد پایان:

  }, PHP_INT_MAX);

نسخه کامل کد غیرفعال سازی XMLRPC :

add_filter(‘xmlrpc_methods’, function () {    return [];  }, PHP_INT_MAX);

تفاوت اصلی روش 3 و 4 این است که شما در روش 4 هر جایی را که وردپرس تماس XML-RPC برقرار می کند، غیر قابل دسترس می کنید.

غیر فعال کردن XMLRPC از طریق فایل Functions.php

5. از طریق یک افزونه وردپرس غیرفعال کنید.

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

از ارائه دهنده میزبانی خود xmlrpc.php را غیرفعال کنید .

متناوباً، برخی از ارائه دهندگان میزبانی در صورت شناسایی حمله، xmlrpc.php را غیرفعال می کنند. به عنوان مثال در برخی اراده دهندگان میزبانی وقتی حمله ای از طریق XML-RPC شناسایی شود، یک قطعه کد به طور خودکار به پرونده Nginx.config اضافه می شود:

location ~* ^/xmlrpc.php$ {return 403;}

این باعث ایجاد خطای 403 می شود و حمله را در مسیر خود متوقف می کند. اگر خودتان این کار را انجام می دهید، بهتر است از یکی از روش های بالا استفاده کنید. اما قبل از انجام این کار، همیشه ابتدا با ارائه دهنده خدمات میزبانی خود تماس بگیرید

XML-RPC در دنیای امروزه

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

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

به طور کلی، XML-RPC یک راه حل مناسب برای برخی از مشکلاتی بود که به دلیل انتشار از راه دور در سایت وردپرس شما رخ داده است. با وجود این ویژگی برخی از حفره های امنیتی ایجاد شد که در نهایت برای برخی از دارندگان سایت های وردپرس بسیار آسیب زننده بود. بنابراین شما برای اطمینان از امنیت سایت خود، بهتر است xmlrpc.php را کاملاً غیرفعال کنید. با گذشت زمان، می توان انتظار داشت که ویژگی های XML-RPC در API جدید وردپرس ادغام شود که دسترسی از راه دور و موارد دیگر را بدون آسیب رساندن به امنیت حفظ می کند.

جمع بندی

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

دیدگاه‌ها

Comments

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *