فلنفترض أنك تبرمج في مدونة أو موقع إخباري. تتوقع أن موقعك أحيانا سيتعرض للاختراق، و المخترق يتسبب في تعديل المحتوى على قاعدة البيانات سواء بشكل يمكن ملاحظته أو بشكل غير ظاهر.
المبرمج عادة يجعل مستخدم واحد لقراءة البيانات و تعديلها و إدارتها، و هذا خطأ.
ما حل تلك المشكلة؟
يجب إنشاء مستخدم (مستخدم في قاعدة البيانات، يمكنك أن تبحث عن MySQL User Account Management لو تستعمل MySQL) لقراءة المحتوى و ربما إنشاء تعليقات فقط، أي صلاحيات أساسية جدا يسمح لمستخدم الموقع القيام بها.
و مستخدم آخر كمدير للمحتوى في خادم قاعدة البيانات و هو فقط من له صلاحية الإضافة و التعديل و الحذف في المحتوى.
لكن لا يجب وضع كلمة مرور ذلك المستخدم المدير في الكود لأن المخترق لو استطاع تصفح محتوى كود الموقع سيحصل على كلمة المرور بسهولة و يعدل على المحتوى.
إذا يجب برمجة نظام يطلب كلمة مرور حساب المدير في الموقع (هنا أعني حساب في الموقع و ليس في خادم قاعدة البيانات)، و لما تكون كلمة المرور صحيحة يدخل إلى صفحة الإدارة لكن بالمستخدم العادي في قاعدة البيانات الذي لا يقدر على التعديل، و لكي يعدل المدير الذي دخل للتو يجب عليه إدخال كلمة مرور المستخدم الخاص بقاعدة البيانات الذي يقدر على التعديل في كل مرة يريد أن يعدل لكي يعمل استعلام أو أمر التعديل.
أمور يجب أن تتوفر في الموقع و الخادم لكي تعمل هذه الطريقة بشكل لائق:
استعمال HTTPS.
إعطاء صلاحية القراءة فقط لكود الموقع المصدري، هذا يمكن أن يمنع المخترق من تعديل كود صفحة دخول المدير و إرسال كلمة مرور مدير قاعدة البيانات لما يدخلها.
استعمال خادم و برمجيات آمنة و محدثة.
استعمال Two-Factor Authentication للدخول إلى صفحة المدير، مثلا يجب إدخال كود تم إرساله عبر SMS إلى هاتف المدير.
إخفاء عنوان صفحة دخول المدير في الموقع عبر جعلها في ملف اسمه طويل و معقد مثل (site/b8218e0dca7337500a2726429c71a75aa34f6e1f)، لكن سيعرف المخترق مكان الصفحة لو استطاع تصفح الكود :-)
يجب أن يدخل المدير من حاسوب نظيف و أمن، ما الفائدة من كل هذا إن كان في جهازك من يتجسس عليك؟
ما رأيك بهذه الطريقة و كيف يمكن تحسينها؟
في حالة اختراق اي شخص الموقع فهو يمكنه ان يتم تخزين كلمة المرور الذي سوف يقوم بأدخالها المدير بهذا سوف يحصل عل كلمة مرور قاعدة البايانات
و ايضا ان تم اختراق المدير بأي شكل او الحصول عل كلمة المرور من عل جهازه الشخصي او اي شئ فبهذا انت تملك قاعده البيانات رغم ان المبرمج من الممكن ان يكون قد اضافة خاصيه Soft Deleting في الكود لكن مع حصول الشخص عل كلمة المرور سوف يكون الامر سهل للحذف عل مستوي الدادا بيز
اظن الحل ممكن ان يكون هناك سرفرين مختلفين
الاول يكون عليه قاعده البيانات و api للتخاطب مع قاعدة البيانات و في حالة طلب التعديل او الحذف يتم عمل Soft Deleting او اضافه حقول جديده بالبيانات الجديده و عمل ايقاف للحقول القديمة و يكون هذا السيرفر مؤمن بشكل كامل ولا يمكن رفع ملفات عليه او اي شئ فقد التخاطب عن طريق الapi فقد
و الثاني يكون في الكود البرمجي و هو الذي يمكن للمخترق الوصول له يفعل فيه ما شاء
في حالة اختراق اي شخص الموقع فهو يمكنه ان يتم تخزين كلمة المرور الذي سوف يقوم بأدخالها المدير بهذا سوف يحصل عل كلمة مرور قاعدة البايانات
لقد كتبت:
إعطاء صلاحية القراءة فقط لكود الموقع المصدري، هذا يمكن أن يمنع المخترق من تعديل كود صفحة دخول المدير و إرسال كلمة مرور مدير قاعدة البيانات لما يدخلها.
أليس هذا مناسب لمنع المخترق من تعديل الكود و جعل الكلمة ترسل إليه؟
نحن لم نحدد مستوي الاختراق فنفترض ان استطاع المخترق الوصول الي صلاحيات ال root ؟
نعم لو إستعمل ثغرة في النظام. في هذه الحالة موقعه على نظام غير آمن، فلا يقدر أن يحمي شيء موجود في مكان غير آمن.
يجب أن يؤمن نظامه و دائما يحدث البرمجيات. الخطر الأكبر هو الوصول إلى root عبر ثغرة تستغل عن بعد.
كل من OpenBSD و GNU/Linux جيدان لما تديرهما بشكل جيد.
التعليقات