النتائج 1 إلى 7 من 7

الموضوع: نصائح للحماية في برامج الويب

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2000
    المشاركات
    530


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


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

    المثال الأول : لنفرض بأنك تريد كتابة برنامج يقوم بأخذ معلومة من المستخدم هي الاسم مثلا، وبعد ذلك نريد عمل استعلام بلغة SQL لإضافة الاسم إلى قاعدة البيانات، حتى يكون الشرح عاما لن نحدد لغة برمجية ما، ولكن ( حسب لغة البرمجة التي تستخدمها ) يجب في النهاية أن تكون استعلاما شبيها بالتالي :
    كود:
    INSERT INTO names (name) VALUES('new_name');
    بحيث تكون new_name الموضحة بالخط العريض في الأعلى هي المتغيرة التي تحتوي على الاسم الذي أدخله المستخدم، كيف تضع محتوى المتغيرة في وسط الاستعلام هي مهمة تختلف حسب لغة البرمجة التي تستخدمها المهم أن الكلمة new_name سيتم استبدالها بأي معلومة يدخلها المستخدم وإرسال الاستعلام إلى مزود قواعد البيانات للتنفيذ .. فإذا أدخل المستخدم الاسم mubarmej سيقو برنامج بتكوين الاستعلام التالي وإرساله للتنفيذ :
    كود:
    INSERT INTO names (name) VALUES('mubarmej');
    حسنا .. ماذا لو أدخل المستخدم العبارة ( I'm mubarmej ) في خانة الاسم؟ أنظر الآن إلى الاستعلام :
    كود:
    INSERT INTO names (name) VALUES('I'm mubarmej');
    كما هو واضح فالاستعلام السابق غير صحيح، وسيعيد برنامج قواعد البيانات خطئا يفيد عدم صحة الاستعلام .. قد لا تكون مشكلة كبيرة بالنسبة لك ولكن ماذا لو كان الشخص الذي قام بالخطأ مخترقا؟ وأن العبارة التي أدخلها كاسم له هي العبارة التالية :
    كود:
     '; DELETE FROM names ;
    حسنا دعننا ننظر ما الذي سيحدث الآن :
    كود:
    INSERT INTO names (name) VALUES(' '; DELETE FROM names ;');
    في المرة الأخيرة فإن برنامجك سيرسل إلى البرنامج ثلاثة استعلامات سيراها مزود قواعد البيانات هكذا :
    كود:
    INSERT INTO names (name) VALUES(' ';
    DELETE FROM names ;
    ');
    الاستعلام الآن سيحتوي على خطأ ولن ينفذ، وكذلك بالنسبة للاستعلام الأخير، ولكن الاستعلام الذي في المنتصف هو الأهم، لأنه استعلام صحيح وسيتم تنفيذه، إذا لم تكن لديك خبرة في لغة SQL فهذا الاستعلام يقوم بحذف جميع الحقول المخزنة في الجدول names، يعني ستفقد جميع الأٍسماء التي تم إدخالها مسبقا!

    طبعا .. قس على ذلك إمكانية حذف جميع المساهمات في أحد ساحات الحوار !

    حل المشكلة :
    لحل هذه المشكلة يجب أن تقوم بتمرير البيانات التي تحصل عليها من الخارج عبر فلاتر خاصة لتحويل العلامات ( ' ) إلى العلامات ( \' ) أو ( '' ) حسب الطريقة التي يتبعها برنامج قواعد البيانات الذي تستخدمه.

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







    __________________
    http://www.ArabBuilder.com
    mubarmej غير متواجد حالياً


  2. #2
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2000
    المشاركات
    530


    هنالك الكثير من الأمثلة الأخرى على مشاكل من الممكن أن تحدث عند استخدام البيانات التي تأتي من المستخدم مباشرة دون التحق منها، ولكن قبل ذلك سأقوم بشرح أنواع أخرى من المشاكل التي من الممكن أن تحدث :

    نسيان ملفات التركيب :

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

    الحل : احذف ملفات التركيب دائما.

    عدم تغيير الإعدادات الافتراضية :

    فعند تركيب برنامج MySQL لأول مرة يتم إضافة مستخدم اسمه root له جميع صلاحيات الإدارة ويكون هذا المستخدم بدون كلمة مرور حيث تستطيع الدخول على حساب المدير وامتلاك جميع صلاحيات الإدارة بواسطته، وكذلك الأمر بالنسبة لساحة الحوار ubb حيث يوجد المستخدم الافتراضية Admin5 بكلمة المرور الافتراضية 4tugboat وإذا لم تقم بحذفه أو تغيير كلمة المرور التابعة له فسيتمكن أي شخص من الدخول عن طريقه وامتلاك صلاحيات الإدارة، ولعل البعض يتذكر الحادثة الشهيرة التي قامت بها إحدى شركات أمن المعلومات الروسية بإعلان أنها حصلت على معلومات حساسة مثل أسماء وعناوين عدد ضخم من الزبائن ( بما فيها أرقام بطاقاتهم الإئتمانية ) كانت مخزنة في قواعد بيانات عدة شركات تجارة إلكترونية دون أن تغير معلومات الدخول الافتراضية للمستخدم الرئيسي في Microsft SQL .

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

    تخزين معلومات غير مشفرة :

    يجب دائما تخزين البيانات المهمة ( مثل كلمات المرور ) في صورة معلومات مشفرة سواءا قمت بتخزينها في قاعدة بيانات أو ملفات على المزود، بعض الأشخاص يعتمد على أن أحدا لا يعرف اسم الملف ويضع معلومات مهمة في هذه الملفات، مثلا يضع كلمات المرور في ملف اسمه sdioj93dr على أمل أن أحدا لن يجربه، ولكن هنالك الكثير من العوامل التي من الممكن أن تكشفه، على سبيل المثال إذا حصل خطأ ما وعرض برنامجك رسالة خطأ تقول بأنه تعذر فتح الملف sdioj93dr فيجب أن تتمنى حينها أن المستخدم الذي كان يزور الصفحة ليس مخترقا، كذلك فإن هنالك بعض الطرق التي تتيح للأشخاص معرفة الملفات الموجودة في أحد الأدلة، تذكر أيضا بأن المزود الذي سيشغل البرنامج قد يكون مشتركا مع مستخدمين آخرين وسيكون من السهل عليهم تشغيل سكريبتات Perl لمعرفة محتويات أدلة المستخدمين الآخرين.
    الحل : قم بتشغير المعلومات دائما، لا تعتمد على الملفات ذات الأسماء الغريبة.


    عدم فهم نظام التصريحات في يونيكس :

    ترددت كثيرا قبل الإفصاح عن هذه المعلومة ولكن جميع الملفات التي تمتلك التصريح 777 هي ملفات مفضوحة 100% ( نعم، هذا يتضمن ملفات ساحة الحوار ubb والملف Admin5.cgi أيضا ) .. إذا كان مزودك مشتركا مع مستخدمين آخرين فمن السهل جدا جدا عليهم أن يصلوا إلى ملفاتك ويحصلوا على جميع المعلومات التي فيها وتغيير محتوياتها، التصريح 777 يعني بأن أي مستخدم لديه وصول إلى النظام يستعطيع قراءة + تنفيذ + تعديل محتويات هذه الملفات.

    الحل : لهذه المشكلة عدة حلول، ولكن هنالك احتمالا بأنك لن تستطيع استخدام أي من هذه الحلول :
    1) الحصول على مزود مستأجر : أي عدم التشارك مع مستخدمين آخرين في نفس المزود، ولكنه غال الثمن مقارنة مع المزودات المشتركة.
    2) تشغيل نمط suexec في الجهاز، وهو يقوم تلقائيا بإعطاء صلاحياتك إلى جميع البرامج التي تعمل في دليلك على المزود، على سبيل المثال، أنا أمتلك الحساب arabbuilder على مزودات مستضيفي، وبالتالي أية ملفات موجودة في الدليل التابع لي ( وهو الدليل /home/arabbuilder ) تنفذ بصلاحيات المستخدم arabbuilder .. بهذه الطريقة يمكنك عمل ملفات وتعطي صلاحيات الوصول لصاحب الملف فقط بحيث لا يستطيع أحد الوصول إلى الملف سوى المستخدم arabbuilder لأنه صاحب الملف، وبالتالي لن تسطيع أية برامج مركبة على المزود الوصول إلى الملف سوى البرامج الموجودة في دليل المستخدم arabbuilder ولن يتمكن الآخرون من الوصول إلى ملفاتي .. السبب في أن هذا التصريح لا يعمل في المزودات التي لا تدعم suexec هو أن هذه المزودات تنفذ جميع السكريبتات في جميع الأدلة على أنها أحد المستخدمين المنفصلين ( عادة يكون المستخدم www أو httpd أو apache ) وهو مستخدم يضاف إلى النظام دون صلاحيات الدخول إلى سطر الأوامر بحيث يكون هذا المستخدم مسؤولا عن تشغيل البرنامج Apache فقط وجميع السكريبتات التي يطلبها Apache مثل سكريبتات Perl، لهذا السبب يجب أن تكون الملفات مصرحة بالنمط 777 حتى يستطيع الجميع ( بما فيهم المستخدم Apache ) الوصول إلى هذه الملفات.

    الفكرة معقدة قليلا ولكن للاختصار .. يجب أن تمتلك ميزة suexec في مزودك، وهذا أمر غير موجود في جميع المزود ( أغلب المزودات في الواقع لا تمتلك هذه الميزة ).

    والمزيد قريبا

    لا تنسوا المشاركة بما لديكم.





    __________________
    http://www.ArabBuilder.com
    mubarmej غير متواجد حالياً

  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    Nov 2000
    المشاركات
    393


    أخي المبرمج ...
    أنا لدي مزود Cobalt RaQ III ، و أعـلم ان ميزاته كثيره مثل لوحة التحكم و الباك آب ... و لكـن هل تتوفر التقنيه التي تحدثت عنها عليه ؟
    إذا لم يكن كذلك ، فهل يكفـي الترخيص 0666 عـلى الملفات لحمايتها من المتطفلين ، و كذلك اظن ان ملف .htaccess يزيد من فعالية الآمـان و الحمايه ...

    مع التحيه





    __________________
    Bond .. James Bond
    CS Fanatic
    JB007 غير متواجد حالياً

  4. #4
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2000
    المشاركات
    530


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

    تفعيل هذا الخيار يعتمد على نظام التشغيل، أنا لا أعرف كيف أفعل هذا الخيار .. ولا أعرف في أي الأجهزة يكون هذا الخيار مفعلا.





    __________________
    http://www.ArabBuilder.com
    mubarmej غير متواجد حالياً

  5. #5

    شكراً Mubarmej



    شكراً على استجابتك السريعة.. و مقالتك الثمينة
    أرجو أن تضمها الى موقعك نظراً لأهميتها
    ز كل سنة وأنت و كل الإخوان بخير.





    Night Rider غير متواجد حالياً

  6. #6
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2000
    المشاركات
    530


    الأخ العزيز JB007 ..

    يسرني أن أخبرك بأنني ( حسبما أعتقد ) قلت لك معلومة غير صحيحة وهي أن suexec يفعل عن طريق نظام التشغيل، فهو يفعل في الواقع عن طريق مزود Apache .. إذا كنت تمتلك إمكانية إعادة تركيب Apache من الشفرات البرمجية فستتمكن من إضافة هذه الميزة إلى السيرفر .. ولكن إذا كان السيرفر مستأجرا ( كما قلت سابقا ) فلن تحتاج إلى هذه الميزة ..

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





    __________________
    http://www.ArabBuilder.com
    mubarmej غير متواجد حالياً

  7. #7


    thanx





    Net Master غير متواجد حالياً





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض