يفترض هذا الدليل أنك أكدت الإصابة. وإن لم تكن قد فعلت، فابدأ بـالفحص في خمس دقائق. وإذا اكتشفت المشكلة للتو، فنفّذ أولًا خطوات الساعة الأولى في كيف تصلح موقع ووردبريس مخترقًا. فهي تغطي النسخ الاحتياطي وقرار إيقاف الموقع وتغيير كل بيانات الدخول، ولا ينبغي أن تتخطاها.

قبل أن تشغّل أي شيء: تحتاج إلى النسخة الاحتياطية المصابة من دليل الإصلاح، ووصول عبر SSH أو SFTP، ويُفضَّل WP-CLI (تتضمنه معظم الاستضافات المُدارة). شغّل الأوامر من مجلد ووردبريس، وهو غالبًا public_html. جرّبها على نسخة تجريبية إن أمكن، وضع الموقع الحي في وضع الصيانة أثناء عملك.

الخطوة 1: أنشئ مجلد حجر

انقل الملفات المشبوهة خارج الموقع بدل حذفها. يمكن استعادة الإيجابية الكاذبة بسهولة، أما الملف المحذوف فلا. ضع المجلد خارج الجذر العام للويب:

mkdir -p ~/quarantine

الخطوة 2: استبدل نواة ووردبريس

يجب ألا تحتوي مجلدات النواة أبدًا على شيفرة معدَّلة يدويًا، لذا فاستبدالها آمن. احفظ رقم الإصدار أولًا، لأنك على وشك حذف الملف الذي يخزّنه:

VERSION=$(wp core version)
rm -rf wp-admin wp-includes
wp core download --force --skip-content --version=$VERSION
wp core verify-checksums

يستعيد التنزيل نسخًا نظيفة من مجلدات النواة ومن ملفات الجذر مثل index.php وwp-login.php. يجب أن يُبلغ الأمر الأخير أن كل شيء سليم. أي سطر «File should not exist» يعني وجود ملف دخيل مخبأ بين ملفات النواة. انقله إلى الحجر.

لا يدخل wp-config.php ضمن التنزيل، لذا افتحه واقرأه. ابحث عن شيفرة فوق الأسطر الافتتاحية أو تحت السطر الأخير، وعن أي eval أو base64_decode أو include يشير إلى ملف لا تعرفه.

الخطوة 3: أعد تثبيت الإضافات والقوالب

أعد تثبيت كل إضافة وقالب من مصدره الأصلي بدل تنظيف نسخة مصابة. هذا أسرع، ولن يفوتك ملف تغيّر بطريقة خفية.

wp plugin list
wp plugin install PLUGIN-SLUG --force
wp theme install THEME-SLUG --force
wp plugin verify-checksums --all

الإضافات والقوالب المدفوعة ليست على wordpress.org، لذا نزّل نسخة جديدة من المورّد وارفعها. احذف كل ما لا تستخدمه أو لا تعرفه، واحذفه بدل الاكتفاء بتعطيله. فملفات الإضافة المعطّلة يمكن لأي شخص يعرف مسارها تشغيلها مباشرة:

wp plugin deactivate PLUGIN-SLUG
wp plugin delete PLUGIN-SLUG

الخطوة 4: افحص أماكن الاختباء المعتادة

نادرًا ما تبقى البرمجيات الخبيثة في ملف واحد. افحص هذه الأماكن حتى بعد استبدال النواة والإضافات، لأنها خارج ما أعدت تثبيته للتو.

grep -RIl --include="*.php" -E "eval\(|base64_decode\(|gzinflate\(|str_rot13\(" wp-content
find wp-content/uploads -name "*.php"
ls -la wp-content/mu-plugins
cat .htaccess
wp cron event list
  • نتائج grep. تظهر هذه الدوال أيضًا في شيفرة مشروعة، لذا فالتطابق مجرد خيط وليس دليلًا. افتح كل ملف واقرأه. لا تحذف ملف إضافة لمجرد أنه تطابق.
  • wp-content/uploads. يجب أن يحتوي على وسائط فقط. أي ملف PHP هنا يذهب إلى الحجر.
  • wp-content/mu-plugins. تُحمَّل الإضافات الإلزامية تلقائيًا ولا تظهر في قائمة الإضافات العادية. وجود ملف هنا لم تضفه علامة تحذير قوية.
  • .htaccess. قارنه بقواعد ووردبريس الافتراضية. قواعد إعادة التوجيه المحقونة، خصوصًا تلك التي تعتمد على مصدر الزائر أو جهازه، أسلوب اختراق كلاسيكي.
  • .user.ini وphp.ini. ابحث عن سطر auto_prepend_file. فهو يشغّل ملفًا قبل كل صفحة، وهو مكان مفضّل لإخفاء باب خلفي.
  • ملفات القالب. افتح functions.php وheader.php وfooter.php في قالبك النشط وابحث عن شيفرة لم تكتبها.
  • المهام المجدولة. قد يعيد حدث cron يستدعي دالة غير مألوفة إنشاء باب خلفي بعد حذفه. احذفه بالأمر wp cron event delete HOOK-NAME.

لمزيد من المعلومات عن الوصول المخفي، راجع كيف تجد باب خلفي في ووردبريس.

الخطوة 5: نظّف قاعدة البيانات

كثيرًا ما تعيش البرمجيات الخبيثة في قاعدة البيانات حيث لا يصل فحص الملفات. خذ نسخة احتياطية منها أولًا بالأمر wp db export. قد لا تكون بادئة جداولك wp_، لذا تحقق منها:

wp db prefix
wp db query "SELECT option_name, option_value FROM wp_options WHERE option_name IN ('siteurl','home');"
wp db query "SELECT ID, user_login, user_email, user_registered FROM wp_users ORDER BY user_registered DESC LIMIT 20;"
wp db query "SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%' OR post_content LIKE '%display:none%';"
wp db query "SELECT option_name FROM wp_options WHERE option_value LIKE '%<script%' LIMIT 50;"
  • siteurl وhome. يجب أن يكون كلاهما نطاقك أنت. قيمة مختلفة تعيد توجيه الموقع كله دون تغيير أي ملف.
  • المستخدمون الجدد. يمكن حذف أي مسؤول لم تنشئه بالأمر wp user delete ID --reassign=ADMIN-ID.
  • المقالات والخيارات التي تحتوي وسوم script. بعضها يحتوي شيفرة تحليلات أو تضمين مشروعة. راجع كل نتيجة، ثم نظّف الجزء المحقون فقط.

الخطوة 6: أغلق الوصول الذي استخدمه المهاجم

إن لم تكن قد غيّرت كل بيانات الدخول بعد، فافعل ذلك الآن. الترتيب الكامل، من الوصول إلى الاستضافة وحتى حسابات ووردبريس، موجود في الخطوة 5 من دليل الإصلاح. أعد توليد مفاتيح الأمان بالأمر wp config shuffle-salts لتنتهي الجلسات الحالية.

الخطوة 7: تحقق ثم واصل المراقبة

wp core verify-checksums
wp plugin verify-checksums --all
find wp-content/uploads -name "*.php"

امسح أي ذاكرة تخزين مؤقت. ثم زر الموقع من هاتفك ببيانات الجوال، قادمًا من نتيجة في جوجل، لأن هجمات إعادة التوجيه كثيرًا ما تختبئ من الزيارات المباشرة. وإذا كانت جوجل قد أبلغت عن الموقع، فاطلب مراجعة ضمن مشاكل الأمان في Search Console. أعد الفحوصات بعد 24 ساعة وبعد أسبوع. عودة ملف أو حساب مسؤول تعني أنه فاتك باب خلفي أو نقطة الدخول.

إذا عادت البرمجيات الخبيثة

تكون للإصابة المتكررة تقريبًا دائمًا إحدى علّتين: باب خلفي لم يُعثر عليه، أو نقطة دخول لم تُغلق. أعد فحص mu-plugins و.htaccess و.user.ini والمهام المجدولة. ثم اتبع الخطوة 7 من دليل الإصلاح لمعرفة كيف دخل المهاجم: إضافات قديمة أو مقرصنة، وبيانات استضافة مسروقة، وسجلات الخادم.

كيف يساعد SiftWP

يجري SiftWP كل أسبوع عبر SSH فحوصات مثل هذه لسلامة الملفات وقاعدة البيانات والبرمجيات الخبيثة، دون أي إضافة على موقعك. تُوضع الملفات المُبلَّغ عنها في الحجر ولا تُحذف مباشرة أبدًا. تُطبَّق الإصلاحات منخفضة المخاطر تلقائيًا، وأي أمر ملتبس يتوقف ويسألك أولًا.

ابدأ برصيد مجاني، دون بطاقة