قوالب الووردبريس و آمان المدونات

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

نظام قوالب الووردبريس ليس كأي نظام آخر ، فهو يعطي المطور الحرية في عمل الكثير من الأشياء ولكن هذه قد تكون نقطة إيجابية وسلبية في نفس الوقت ، العديد من الثغرات الموجودة في قوالب الووردبريس اليوم هي نتيجة عدم التعمق في الـ WordPress API أو عدم الفهم للطريقة التي يعمل بها سكربت الووردبريس بالأساس !

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

عندما قلت بأني سأذكر أمثلة من قوالب عربية ، فأنا لا أقصد أن القوالب الأجنبية آمنة 100/100 ولكني أحب أن أعمل بالمثل القائل “الأقربون أولى بالمعروف” ، هذا بالإضافة إلى أني أحب تشجيع المبدعين العرب و زيادة جودة قوالبهم مستقبلياً .

أسماء القوالب العربية المستخدمة في الموضوع :
1 – قالب myPage للأخ Ahmed Alkatheeri .
2 – قالب EQALAM للأخوة Yazeed Al Swailem & Talal AlAsmari .
3 – قالب dMagazine 2 للأخ Raheem Karar .
4 – قالب WebColors 2.0 للأخ Salah Elimam .

أولاً : الأمر كله يتعلق بالصلاحيات !

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

بإختصار مسألة عدم الإنتباه للصلاحيات تمكن الأعضاء بأي رتبة كانوا ( مشترك ، مساهم ، كاتب ، محرر ) من تغيير إعدادات القالب ، ولكم أن تتخليوا مقدار خطورة هذه النقطة و ماذا يمكن أن تسببه من اضرار جسيمة !

مشكلة الصلاحيات ليست فقط في حفظ الإعدادات قد تكون في رفع الملفات أو أي شئ يتطلب صلاحيات خاصة .

إقتباس من قالب myPage ملف functions.php


if ( $_GET['page'] == basename(__FILE__) ) { 
      if ( 'save' == $_REQUEST['action'] ) { 
           foreach ($options as $value) { update_option($value['id'], $_REQUEST[$value['id']] ); } 
           header("Location: admin.php?page=functions.php&saved=true"); die;   
     } else if ('reset' == $_REQUEST['action']){ 
           foreach($options as $value) { delete_option($value['id']); } 
           header("Location: admin.php?page=functions.php&reset=true"); die; 
  } 
} 

الأسوء في قالب myPage أنه جعل عملية الإستجابة من متغير $_REQUEST و هذا يعطي إمكانية إرسال المتغيرات عبر الرابط مباشرة GET لتتأكد من ذلك جرب الدخول بعضوية مشترك أو أياً كانت الرتبة وإجعل الرابط مشابه للتالي

localhost/wordpress/wp-admin/admin.php?page=functions.php&action=save&mp_site_desc=value

ستظهر لك رسالة بأنك لا تملك الصلاحيات الكافية للدخول ، ولكن بغير المتوقع تم حفظ الإعدادات بنجاح !

هذه الثغرة موجودة في العديد من قوالب الووردبريس وهي موجودة أيضاً في قوالب عربية مثل : dMagazine 2 و WebColors 2.0 و حل هذه المشكلة ببساطة هو التحقق من أن المستخدم يملك الصلاحية للتحكم بالإعدادات قبل عملية الحفظ .

ثانياً : الصلاحية الكاملة لإستخدام وسوم الـ HTML

تعد هذه الثغرة أيضاً منسية لدى الكثرين رغم خطورتها الفائقة ، صلاحية السماح بإستخدام وسوم الـ HTML بجميع وسومها موجودة إفتراضياً فقط لدى الرتب التالية : ( المدير و المحرر ) و إن كنت أحد الكتاب في إحدى المدونات فلا شك أنك لاحظت أنه أثناء نشر تدوينة جديدة لا يسمح لكم بإستخدام وسوم HTML مثل style و script لأنها من الممكن أن تسبب خطر كبير على الموقع .

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

وهذا مثال مبسط للمطورين لكيفية تفادي هذه الثغرة :

 if ( isset( $settings['about_text'] ) && !current_user_can( 'unfiltered_html' ) ) $settings['about_text'] = stripslashes ( wp_filter_post_kses( addslashes ( $settings['about_text'] ) ) ); 

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

ثالثاً : إستعمال إصدار قديم من سكربت TimThumb

ماهو سكربت TimThumb ؟
سكربت TimThumb و بكل بساطة سكربت مجاني يستخدم لقص الصور و غالباً ما يستخدم في التعامل مع المصغرات .

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

رأي الشخصي إستعمال سكربت مثل TimThumb في قوالب الووردبريس هو الخطأ بعينه ! ، فلماذا الحاجة إلى السكربت خاصة أن الووردبريس وفرت لنا ميزة post-thumbnails ولماذا نرهق السيرفر بإرسال المزيد من إستعلامات HTTP و الحل موجود أمام أعيننا .

الحل : تحديث سكربت TimThumb إلى احدث إصدار متوفر .

رابعاً : عدم إخفاء إصدار الووردبريس

عادة ما نطالب مستخدمي السكربت بإزالة ميتا generator الموجودة غالباً ضمن وسم الـ Head في ملف header.php ولكن الأغرب لماذا نطالب المستخدمين بإزالة هذا الوسم ثم نقوم بإضافتها إلى قوالبنا ؟!

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

خامساً : عدم تضمين دوال wp_head() و wp_footer()

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

مثال على ذلك بإمكانكم فتح ملف footer.php في قالب EQALAM و البحث عن دالة wp_footer .

سادساً : تجاهل تحذيرات الـ PHP

تحذيرات الـ PHP هي عبارة عن أخطاء صغيرة ناتجة عن عدم الإستخدام الصحيح للدوال أو النمط النحوي للغة نفسها ، لا بأس بتجاهل بعض التحذيرات ولكن الفاجعة الأكبر عند وجود المئات من هذه التحذيرات ويتم تجاهلها ، و التجاهل المستمر لهذه التحذيرات ربما يجعل القالب يعمل على غير المتوقع !

لإظهار هذه التحذيرات بإمكانك تفعيل وضع التطوير في ملف wp-config.php :

define ( 'WP_DEBUG' , true );

سابعاً : إستخدام دوال عتيقة !

مع التطويرات الحاصلة لسكربت الووردبريس فإنه من الطبيعي أن يتم تغيير سلوك بعض الدوال او تغيير أسمائها ، هناك العديد من القوالب و الإضافات التي تتجاهل هذه الملاحظات ، وهذا قد يؤدي إلى عد عمل الإضافة و القالب بالشكل غير المتوقع أو ما يعرف بحالة “غير متوافق مع الإصدار الجديد” ، لذا ارجوا الحرص على مراجعة قالبك أو إضافتك مع كل إصدار جديد للوردبريس .

ثامناً : تعديل صلاحيات الملفات

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

 


عموماً لدي إرتياح كبير من القوالب أعلاه ، لأن الثغرات فيها ليست خطيرة جداً وأحب أن أنوه أن الثغرات الموجودة أعلاه ليست نتيجة فحص دقيق للقالب و إن كان بالإمكان فأرجوا من الأخوة المطورين مراجعة قوالبهم بشكل أكثر دقة ، و للأخوة المبتدئين نرجوا إستخدام بعض الإضافات لفحص الأخطاء الموجودة في قوالبهم مثل إضافة Theme Check و غيرها ,

حاولت أن ابين أعلاه بعض الأخطاء المتعلقة بالآمان و إن شاء الله ستكون هناك موضوعات قادمة للتعرف عن أنواع أخرى من الأخطاء أو السلوكيات الغير صحيحة و المتبعة في العديد من القوالب العربية و الأجنبية .

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

و أي إستفسار أو سؤال أنا مستعد بإذن الله .

18 رأي حول “قوالب الووردبريس و آمان المدونات”

  1. آڵسڷـآم عڵيڪم ـۈرـζـمـﮧ آڵڵـﮧ ـۈبرڪآٺـﮧ •

    ڪيفڪ آخي نشـۈآن عسآڪ بخير • ^^

    أسٺفد ڪثيرآً من آڵٺدـۈينـﮧ رغم آني مبٺدى ـۈڵڪن أٺضـζـٺ ڵي بعض آڵأشيآء

    سأـζــۈڵ ٺطبيق بعض آڵخطـۈآٺ أن أسٺطعٺ

  2. موضوع في غاية الاهمية ..
    شكرا لطرحك الرائع ..
    لي عودة ان شاء الله بعد ان الانتهاء من قالبي الجديد لمدونتي
    لاستفسرك عن بعض الاشياء .. ان سمحت طبعاً ^_^

  3. نعم معك حق اخي نشوان
    هناك عدة قوالب مصممة بطيرقة جيدة ورائعة
    والذي يراها ويعجب بها ولا يعطي اي اهتمام لمدى حمايتها وثغراتها
    وشكرا جزيلا على الموضوع الرائع والمفيد في انتظار جديدك

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

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

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

    اتمنى ان يستفيد المطورين من هذا الموضوع لان النفع سيعود على الجميع
    تحياتي اخي نشوان

  5. موضوع جد مفيد اخي العزيز نشوان

    لكن لدي تعقيب بسيط

    بالنسبة لسكريبت timthumb فهو عن جد سكربت رائع ولديه مميزات يتفوق بها عن ووردبريس في بعض الحالات مع اني لا اره اصبح يشكل خطرا كما في السابق فلقد تم تطويره وترقيه بالكامل ولا خوف الان من استعماله وخطورة كانت تكمن في استعمال المواقع الخارجية لرفع ملفات خبيثة على السيرفر دون شعور صاحب الموقع (طريقة خبيثة نوعا ما 🙂 )

    بالنسبة للاصدار ووردبريس فيمكن تعرف عليه ايضا حتى اذا تم حذف الميتا تاج والطريقة فقط بتصفح readme.html 🙂

    بالنسبة لدوال العتيقة هناك اضافة تساعد على معرفتها وهذه الاخيرة تم انتقادها في ووردبريس (اي لم تعد تعمل الى مع الاصدارات القديمة منه) والاضافة على ما اظن اسمها Deprectaed log والله اعلم عوض عرض الاخطاء بتفعيل wp_debug وتظهر الاخطاء مباشرة في الموقع

    تقبل مروري ومشكور على الموضوع الشيق

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

      اما مسألة ظهور الاخطاء فربما يكون ظهور الأخطاء مباشرة مزعج لدى البعض ولهذا وفرت الووردبريس حلول بديل وهي تسجيل الأخطاء في سجل log ، إطلع على هذا الرابط للمزيد من التفاصيل :
      http://codex.wordpress.org/Editing_wp-config.php#Debug

      وشكراً للتنبيه بخصوص ملف readme.html ، تم إزالة الملف 🙂

      تقبل تحياتي

  6. تدوينة اكثر من رائعة اعجبتنى كتير
    وان شاء الله سوف اراعي الاخطاء التى ذكرتها في الاعلى وتجنبها
    تحيتى واحترامى لك
    فارس

  7. جزاكم الله خيرا على التدوينة المفيدة جدا جدا.
    لي ملاحظة فقط على موضوع اصدار الووردبريس، عند تضمين ملفات الجافا سكربت دون تحديد اصدار لها تضع الووردبريس اصدارها في نهاية رابط الملف وأظن كذلك لملفات الجافاسكربت الافتراضية المنشاة بواسطة ووردبريس.
    وبالتالي حتى الآن مازال من الممكن الوصول لاصدار الووردبريس.
    يعني مثلا في مدونتك لو فتحت مصدر الصفحة هذه ستجد اصدار الوورد بريس 3.6 موجود في مكانين:
    dropdowns.js?ver=3.6
    comment-reply.min.js?ver=3.6
    الملف الاول خاص بالقالب والملف الثاني افتراضي مع الووردبريس، الملف الاول حله ممكن لكن ماذا عن الملفات الافتراضية؟
    تحياتي

اترك رد