إذا لم تسمع من قبل بـ XML-RPC، فأنت لست وحدك. معظم أصحاب مواقع WordPress لا يعرفون أن هذا الملف موجود أصلًا، ناهيك عن أنه يجلس بهدوء على الخادم كباب مفتوح للمهاجمين. مع ذلك، يُعد من أكثر الملفات استغلالًا في WordPress، وتعطيله لا يستغرق أكثر من خمس دقائق.
لنتحدث عن ما يفعله XML-RPC فعليًا، ولماذا يُعتبر خطرًا أمنيًا لمعظم المواقع، وكيف يمكنك إيقافه بأمان بالتفصيل.
ما هو XML-RPC في WordPress؟
XML-RPC هو ملف (xmlrpc.php) يسمح للتطبيقات الخارجية بالتواصل مع موقع WordPress عبر HTTP. تم بناؤه منذ سنوات، قبل أن يكون لدى WordPress واجهة REST API الحديثة، لدعم أشياء مثل:
- النشر على مدونتك من تطبيق موبايل
- استخدام برامج نشر سطح المكتب القديمة مثل MarsEdit أو Windows Live Writer
- تفعيل خصائص pingbacks و trackbacks بين مواقع WordPress
- ربط خدمات طرف ثالث مثل Jetpack بموقعك
يبدو مفيدًا، صحيح؟ المشكلة أن تقريبًا لا أحد يستخدم هذه الأدوات القديمة بعد الآن. أصبح لدى WordPress الآن واجهة REST API كاملة تقوم بمعظم هذه المهام بشكل أفضل وأكثر أمانًا. لكن ملف xmlrpc.php لا يزال مفعّلًا بشكل افتراضي في تقريبًا كل تثبيت WordPress، سواء كنت تحتاجه أم لا.
لماذا يُعد XML-RPC مشكلة أمنية
هنا يأتي الجزء المهم. XML-RPC ليس فقط غير مستخدم، بل هو خطير بشكل فعلي بسبب الطريقة التي يستخدمه المهاجمون بها.
هجمات القوة العمياء تصبح أسهل
عادةً، تعني هجمة القوة العمياء ضد صفحة تسجيل الدخول محاولة واحدة في كل طلب. لكن مع دالة system.multicall في XML-RPC، يمكن للمهاجم تجميع مئات التركيبات من اسم المستخدم وكلمة المرور في طلب واحد. هذا يعني أن الخادم يعالج مئات محاولات تسجيل الدخول في طلب واحد، وهو أمر أصعب بكثير للكشف عنه وحظره مقارنة بحركة المرور العادية. لقد تحدثنا عن أساسيات هذا النوع من الهجمات في أمان تسجيل الدخول في WordPress: تغييرات بسيطة توقف معظم محاولات القوة العمياء.
تضخيم هجمات DDoS عبر Pingbacks
ميزة pingback يمكن أيضًا استخدامها كسلاح. يرسل المهاجمون طلبًا يتظاهر بأن موقعك يريد إرسال pingback لرابط هدف معين، فيقوم خادمك بالعمل نيابةً عنهم بزيارة ذلك الرابط. كرر هذا عبر آلاف مواقع WordPress المخترقة في نفس الوقت، وستحصل على هجوم موزع يستخدم تركيبات WordPress البريئة كقوة تنفيذية. خادمك نفسه يصبح مشاركًا غير راضٍ في الهجوم.
ضجيج مستمر في الخلفية
حتى لو لم تنجح أي هجمة بشكل كامل، فإن ملف xmlrpc.php يتعرض لضربات مستمرة من الروبوتات التي تفحص الإنترنت بحثًا عن أبواب مفتوحة. هذا يخلق ضغطًا إضافيًا على خادمك، ويملأ سجلاتك بمعلومات غير مفيدة، ويعطي المهاجمين مساحة أكبر للبحث عن نقاط الضعف.
هل تحتاج فعلًا إلى XML-RPC؟
قبل تعطيله، تحقق إن كنت تعتمد عليه. من المحتمل أنك تحتاج إلى XML-RPC إذا:
- كنت تستخدم إضافة Jetpack
- كنت تنشر منشورات من تطبيق موبايل يستخدم XML-RPC تحديدًا (نادر هذه الأيام، معظمها يستخدم REST API الآن)
- كان لديك تكامل مخصص تم بناؤه خصيصًا لاستدعاء xmlrpc.php
إذا لم ينطبق عليك أي من ذلك، وهذا حال معظم أصحاب المواقع، فأنت في وضع أمان لتعطيله.
كيفية تعطيل XML-RPC في WordPress
الطريقة الأولى: استخدام إضافة أمان
الطريقة الأسهل والأكثر أمانًا هي من خلال إضافة قد تكون مثبتة عندك بالفعل.
- Wordfence: اذهب إلى Wordfence > All Options > Brute Force Protection، وفعّل خيار تعطيل مصادقة XML-RPC.
- iThemes Security: تحت الإعدادات، ابحث عن WordPress Tweaks وفعّل خيار "Disable XML-RPC".
- Disable XML-RPC-API: إضافة خفيفة ومخصصة تقوم بمهمة واحدة فقط، وهي تعطيل XML-RPC بالكامل، بدون أي إعدادات معقدة.
إذا كنت تستخدم إضافة أمان بالفعل، فهذا هو الخيار الأقل خطورة لأنه لا يلمس ملفات الخادم بشكل مباشر.
الطريقة الثانية: تعديل .htaccess (خوادم Apache)
إذا كنت تفضل عدم إضافة إضافة أخرى، يمكنك حظر الوصول على مستوى الخادم. أضف هذا إلى ملف .htaccess:
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
هذا يخبر خادمك برفض أي طلب لهذا الملف قبل أن يقوم WordPress حتى بتحميله، وهو أكثر فعالية من الحظر عبر الإضافات.
الطريقة الثالثة: إضافة فلتر إلى functions.php
إذا كنت مرتاحًا لتعديل ملفات القالب (استخدم دائمًا قالبًا فرعيًا child theme، ولا تعدّل القالب الأساسي مباشرة)، يمكنك إضافة هذا الكود:
add_filter('xmlrpc_enabled', '__return_false');
هذا يعطل وظيفة XML-RPC بدون حظر الوصول إلى الملف نفسه فعليًا. إنه حل وسط مقبول، لكن طريقة .htaccess عادة أقوى لأنها توقف الطلب في مرحلة أبكر.
الطريقة الرابعة: تعطيل Pingbacks فقط بشكل انتقائي
إذا كنت لا تزال تحتاج إلى XML-RPC لشيء ما مثل Jetpack ولكنك تريد إغلاق ثغرة pingback، أضف هذا إلى functions.php بدلًا من تعطيل XML-RPC بالكامل:
add_filter('xmlrpc_methods', function($methods) {
unset($methods['pingback.ping']);
unset($methods['pingback.extensions.getPingbacks']);
return $methods;
});
هذا يترك الباب مفتوحًا بالقدر الكافي للتكاملات التي تحتاجها، بينما يزيل الدوال المحددة التي يستغلها المهاجمون أكثر من غيرها.
كيف تتأكد من أن الأمر نجح
بعد إجراء التغييرات، اختبرها. زر yoursite.com/xmlrpc.php في متصفحك. إذا رأيت رسالة "XML-RPC server accepts POST requests only"، فهذا يعني فقط أن الملف يمكن الوصول إليه ولم تختبر التعطيل الفعلي بعد. الإعداد المحظور بشكل صحيح يجب أن يعطي خطأ 403 Forbidden، أو أن يرفض الملف أي طلبات فعلية. يمكنك أيضًا استخدام أداة تحقق من XML-RPC عبر الإنترنت لإرسال طلب تجريبي والتأكد من عدم وجود استجابة.
لماذا هذا الأمر أهم مما تظن
تعطيل XML-RPC لن يصنع عناوين رئيسية، ولن يشعرك بأنه انتصار أمني كبير كما يشعرك تثبيت جدار ناري. لكنه يغلق واحدة من أكثر نقاط الدخول استغلالًا باستمرار في WordPress، بدون أي تكلفة تقريبًا وبدون أي سلبيات لمعظم المواقع. إذا كنت تراجع دفاعات موقعك، فهذا يجب أن يكون في أعلى القائمة، بجانب فحص صفحة تسجيل الدخول ومراجعة قائمة الإضافات، مواضيع نتحدث عنها في قائمة فحص أمان WordPress التي يجب على كل صاحب موقع مراجعتها كل ربع سنة.
بيئات الاستضافة الجيدة غالبًا تتولى هذا النوع من التحصين تلقائيًا كجزء من إدارة تثبيت WordPress، لكن إذا كنت تدير خادمك الخاص أو غير متأكد من التهيئة الحالية، فمن المفيد التحقق بنفسك. جدار حماية تطبيقات الويب المُدار web application firewall يمكن أيضًا أن يساعد في اكتشاف طلبات XML-RPC المسيئة قبل وصولها إلى تطبيقك، وهو ما يضيف طبقة أخرى إذا لم تكن جاهزًا لتعطيله بشكل كامل.
الخلاصة
ما لم تكن تستخدم Jetpack بشكل فعلي أو أداة نشر قديمة تعتمد عليه، فلا يوجد سبب جيد لترك ملف xmlrpc.php مكشوفًا. اختر الطريقة التي تناسب مستوى راحتك، إضافة، أو .htaccess، أو functions.php، تحقق من أنها نجحت، واحذف نقطة هجوم أخرى من قائمتك. إنه تغيير صغير يزيل هدفًا شائعًا بشكل مفاجئ، وهو من أفضل ممارسات أمان WordPress التي يسهل تطبيقها بسرعة.
باختصار، تطبيق أفضل ممارسات أمان ووردبريس مثل هذه يجعل موقعك أكثر صعوبة على المهاجمين، ويقلل من الحمل غير الضروري على خادمك.