معظم اختراقات ووردبريس تبدأ من باب بسيط: كلمة مرور خُمّنت أو جاءت من تسريب في موقع آخر. ألقِ نظرة على سجل الوصول لأي موقع ووردبريس؛ على الأرجح سترى مئات طلبات POST إلى wp-login.php وxmlrpc.php من عناوين مجهولة. هذه روبوتات وتكلفتها شبه معدومة، وتزور كل موقع.

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

كلمة مرور قوية، لكن بالتعريف الصحيح#

كلمة المرور القوية هي الطويلة والفريدة. «P@ssw0rd!» ليست قوية رغم الرمز والرقم، لأنها موجودة في كل قوائم التخمين. أما عبارة عشوائية طويلة استُخدمت لهذا الموقع فقط فهي أفضل بكثير.

  • أنشئ كلمة مرور مستقلة لكل مستخدم مدير ومحرر، واستخدم مدير كلمات مرور.
  • غيّر كلمة مرور قاعدة البيانات وحساب الاستضافة وFTP بالمعيار نفسه؛ فهذه تُنسى كثيرًا.
  • لا ترسل كلمة المرور لزميل عبر تطبيق مراسلة أو بريد. الأفضل أن تنشئ له مستخدمًا مستقلًا.
  • احذف الحسابات غير المستخدمة، لا أن تعطّلها فقط.

واسم المستخدم admin يكشف نصف المعادلة. إن كان لا يزال موجودًا فأنشئ مستخدمًا مديرًا جديدًا باسم آخر، وانقل المحتوى إليه واحذف admin. واضبط «الاسم المعروض» في المقالات ليختلف عن اسم الدخول.

المصادقة الثنائية#

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

الخطوات العامة:

  1. اختر من المستودع الرسمي لووردبريس إضافة للمصادقة الثنائية تكون نشطة ومحدّثة.
  2. ثبّت الإضافة وفعّلها لحسابك وامسح رمز QR بتطبيق المصادقة.
  3. احفظ رموز النسخ الاحتياطي في اللحظة نفسها؛ فإذا فقدت هاتفك فهي وحدها تنقذك.
  4. ثم اجعلها إلزامية لأدوار المدير والمحرر.
  5. اختبر في نافذة خاصة أن الدخول يطلب الرمز فعلًا.

وإذا كان الموقع متجرًا فالمصادقة الثنائية ليست لازمة للعملاء؛ لكنها ضرورية لكل من يملك صلاحية لوحة التحكم.

تحديد المحاولات الفاشلة#

الإضافات الجاهزة تؤدي هذه المهمة، لكن المنطق بسيط ويمكن تنفيذه بسطور قليلة من الكود. الكود التالي يحظر العنوان نفسه 15 دقيقة بعد خمس محاولات دخول فاشلة من عنوان IP واحد. يُخزَّن العداد في transient وينتهي من تلقاء نفسه. ضعه في إضافة صغيرة أو mu-plugin.

PHP
<?php
function di9_login_key(): string {
	$ip = isset( $_SERVER['REMOTE_ADDR'] )
		? sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) )
		: 'unknown';
	return 'di9_fail_' . md5( $ip );
}

add_filter( 'authenticate', function ( $user ) {
	if ( (int) get_transient( di9_login_key() ) >= 5 ) {
		return new WP_Error(
			'too_many_attempts',
			esc_html__( 'Too many failed attempts. Please try again in a few minutes.', 'di9' )
		);
	}
	return $user;
}, 30 );

add_action( 'wp_login_failed', function () {
	$key = di9_login_key();
	set_transient( $key, (int) get_transient( $key ) + 1, 15 * MINUTE_IN_SECONDS );
} );

ملاحظتان. إذا كنت خلف وكيل (Proxy) أو CDN فإن REMOTE_ADDR هو عنوان الوكيل فيصبح كل المستخدمين عنوانًا واحدًا؛ ففي هذه الحالة استخدم الحظر على مستوى الخادم أو جدار الحماية في تلك الخدمة. والثانية أن هذا الكود لا يغني عن جدار الحماية، بل يجعل التخمين الجماعي مكلفًا فقط.

تقليل سطح الهجوم#

بضعة إعدادات صغيرة لا تكلّف شيئًا:

الإجراءالسبب
تعطيل تحرير الملفات من لوحة التحكمحتى لا يستطيع المهاجم الذي يدخل تغيير كود القالب والإضافات مباشرة
إغلاق XML-RPC إن كنت لا تستخدمهفهو طريق آخر لتخمين كلمات المرور
التحديث المنتظممعظم الاختراقات تأتي من إضافة قديمة
مستخدم بأقل صلاحية لازمةالكاتب لا ينبغي أن يكون مديرًا

لإغلاق تحرير الملفات أضف هذا السطر في wp-config.php فوق عبارة «That's all, stop editing»:

PHP
define( 'DISALLOW_FILE_EDIT', true );

وبالنسبة إلى XML-RPC، إذا لم يعتمد عليه تطبيق أو إضافة للجوال فهذا الفلتر يكفي:

PHP
add_filter( 'xmlrpc_enabled', '__return_false' );

انتبه إلى أن بعض الخدمات (مثل بعض روابط الإضافات) تستخدم XML-RPC أو REST؛ فبعد التغيير جرّب كل الاتصالات المهمة. وعن التحديث اقرأ التحديث الآمن لووردبريس.

إذا رأيت شيئًا غريبًا#

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

الأدوار وأقل صلاحية#

كثير من المواقع تجعل كل الزملاء «مديرين» لأن ذلك أسهل. وهذه السهولة تُدفع كلفتها لاحقًا: كل حساب مدير بوابة دخول كاملة. كاتب المقالات يحتاج إلى دور «كاتب» لا مدير. وللمتعاقد الذي يعمل بضعة أيام فقط أنشئ حسابًا مؤقتًا واحذفه بعد انتهاء العمل. وكل بضعة أشهر راجع قائمة المستخدمين واحذف الحسابات غير المستخدمة.

وإذا كان الموقع متعدد الكتّاب أو متجرًا فانظر ما الأدوار الجديدة التي أضافتها الإضافات وما صلاحيات كل دور. فدور «مدير المتجر» له أيضًا صلاحية حساسة ويجب حمايته بالدقة نفسها.

إشعار الدخول والمراجعة#

من الأفضل أن تعرف من دخل إلى الموقع ومتى. تتوفر إضافات موثوقة تقدّم سجل نشاط وتسجّل عمليات الدخول. وحتى رسالة بريد تنبيه عند دخول المدير تكفي لتكتشف النمط الغريب مبكرًا. والاستضافات عادةً لديها سجل وصول؛ فإذا ارتفع فجأة عدد طلبات wp-login.php فهناك هجوم جارٍ، ففعّل جدار الحماية أو الحظر على مستوى الخادم.

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

الخلاصة#

  • كلمة المرور القوية هي الطويلة والفريدة؛ ومدير كلمات المرور يسهّل الأمر.
  • فعّل المصادقة الثنائية (TOTP) لكل المستخدمين الذين لهم صلاحية لوحة التحكم واحتفظ برموز النسخ الاحتياطي.
  • حدّد المحاولات الفاشلة؛ بكود قصير أو إضافة أو جدار حماية.
  • احذف المستخدم admin وأغلق تحرير الملفات من لوحة التحكم.
  • عطّل XML-RPC إن لم تكن بحاجة إليه، لكن اختبر الاتصالات.
  • تغيير عنوان الدخول تجميل لا أمان.