صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 23

الموضوع: تخلص من دالة الحماية التعيسة لديك

  1. #1

    تخلص من دالة الحماية التعيسة لديك



    السلام عليكم

    يستخدم كل مبرمج دالته او كلاس كتبها بنفسه او نقلها من موقع لحماية المدخلات والتخلص من ثغرات ال xss وال sql injection
    قد تكون قصيرة او طويلة
    قد تستخدم دالة من دوال ال php او تكون مستخدمة للكثير من عمليات الاستبدال str_replace
    لا يهم مادمت مقتنع بأنها تحمي مدخلاتك فاستخدمها

    ولكن المهم هو متي تستخدمها ؟
    للاسف الكثير من المبرمجين يمررون كل شئ علي دالة الحماية التي تكون في الغالب دالة ثقيلة للغاية
    هذا غير انها وبنسبة 99% تنشئ متغيرات جديدة بداخلها تحمل نفس المحتوي ولكن محمي مما يضاعف المحتوي داخل الذاكرة فلو مررت لها 30 متغير وكانت تنشئ نسخة اخري من كل متغير فأصبح في الذاكرة لديك ال 30 متغير وقيمها مرتين
    كل متغير يحجز حيزه الكامل من الذاكرة وليس علي حجم البيانات بداخله فقط

    فلما عزيزي المبرمج ؟

    لما تستخدم دالة الحماية وتمرر لها حقل ادخال بريد الكتروني مع ان دالة ereg للتحقق من ان المدخل بريد هي كافية لحمايته فهي لا تقبل الرموز الخاصة

    لما تستخدم دالة الحماية لتمرر لها الباسورد في حين انك في الحقيقة لا تعرض الباسورد علي المتصفح لأي زائر ليستغل ك xss كما انك لا تدخله قاعدة البيانات ليستخدم ك sql injection ولكنك تشفره ب md5 وهي لا ينتج عنها اية ثغرات !!

    لما تمرر كل مدخلات ال action لدالة الحماية في حين انك تستخدم دالة if لترسل كل اكشن لدالة معينة او تستخدم switch - case

    فهذه لا تحوي ثغرات ولا تحتاج لتمرير $_GET['action'] لدالة حماية

    كود PHP:
    switch($_GET['action'])
    {
        case 
    '1':
            
    action1();
            break;
        case 
    '2':
            
    action2();
            break;
        default;
            echo 
    'error';
            exit;

    بالطبع هذا لمن يستخدمها ولا يستخدم كنترولر

    لو كانت المدخلات تعرفها كلها يمكنك فقط ان تستبعد اي شئ غيرها هكذا

    كود PHP:
    if(!in_array($input, array('1''2''5'))) {
        die(
    'error');

    أيضا لما تمرر مدخل ان واثق انه يجب ان يكون رقم علي دالة الحماية ولا تستخدم فقط intval()

    اعتقد انك تشتت

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

    تمرر المدخل علي دالة الحماية فقط لو تحقق فيه الشرطين التاليين

    1- مدخل لا تستطيع ان تتوقع محتواه
    2- ستعرضه علي المتصفح للزوار او ستدخله قاعدة البيانات سواء للتخزين او للكشف عن حقول

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

    الباسورد : لن تعرضها علي المتصفح ولن تدخلها قاعدة البيانات ولكنك ستستخدم md5 في المقارنة والإدخال لقاعدة البيانات وبالتالي سقط الشرط الثاني فلا تمررها لدالة الحماية

    الكابتشا : لن تعرضها علي المتصفح ولن تدخلها قاعدة البيانات ولكنك فقط تستخدمها في المطابقة

    كود PHP:
    if($captcha '1534')
    {
        
    //
    }
    else
    {
        
    //

    حتي لو حمل المتغير $captcha ثغرات مدخله من الزائر فهي لن تضر علي الأطلاق

    حقل البريد الالكتروني : ستقوم بالتحقق منه ب ereg وبالتالي لا داعي لإدخاله لدالة الحماية فأنت تتنبأ بشكل المدخل وتستبعد كل ما خلافه وبالتالي سقط الشرط الأول

    لو كان هناك قائمة منسدلة وتعرف ما يجب ان يختاره الزائر فقط استخدم طريقة !in_array لتستبعد كل ما لا تريده

    مثال اخر وهو صفحة اضافة موضوع

    حقل عنوان الموضوع يتحقق فيه الشرطين فمرره لدالة الحماية
    حقل نص الموضوع يتحقق فيه الشرطين فمرره لدالة الحماية

    لو كان هناك حقل ابتسامات فطبق عليه !in_array وضع في المصفوفة كل رموز الإبتسامات التي لديك

    لو كان لديك حقل مثلا ( هل الموضوع مثبت ) يقبل 0 او 1 فتحقق منه ب intval او بشرط


    مميزات الطريقة
    - جعل برمجيتك أخف وأقل استهلاك للموارد
    عيوبها
    - تحتاج لتركيز عالي واي خطأ سيسقطك في ثغرة ولكن مع كثرة التعامل ستتعود

    لا تنسي ان دالة mysql_real_escape_string كافية لحماية اي مدخل لقاعدة البيانات من sql injection
    ولكن حينما تجلب المحتوي من قاعدة البيانات وتود عرضه للزائر يجب ان تحميه بتحويل الرموز الخاصة مثل < و >
    ثم تضيف / قبل ' و "
    وبدلاً من عمل ذلك في كل مرة تجلب المحتوي طبقها مرة واحدة قبل ادخال المحتوي لقاعدة البيانات وينتهي الأمر فتجلب وتعرض مباشرة
    ولن تحتاج لاستخدام mysql_real_escape_string
    ولكن استخدمها في الأماكن التي لن تحفظ فيها المحتوي داخل القاعدة ولكن تريد ان تري هل هناك محتوي بهذا الأسم ام لا





    __________________
    السيف أصدق أنباء من الكتب


  2. #2
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2009
    المشاركات
    326


    بارك الله فيك , وشكرا لك
    استفدت كثيرا من المشاركة ....





    __________________
    ما الشأن وجود الطلب، و إنما الشأن أن ترزق حسن الأدب.

  3. #3
    عضو نشيط
    تاريخ التسجيل
    May 2009
    المشاركات
    121


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





    __________________
    العضوية مشتركة بين 3 اشخاص

  4. #4


    يعطيك العافيه على المعلومات القيمة ..

    لكن اخي لم تذكر ماهي دالة الحماية ؟
    اخوك مبتدئ في البرمجة






  5. #5
    عضو نشيط
    تاريخ التسجيل
    Apr 2004
    المشاركات
    236


    جزاك الله كل خير ..





    __________________
    مشاريعي الحالية :
    الحوارات |||||||||| 90%
    الأخبار |||||||||| 5%
    آخر |||||||||| 40%

  6. #6
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


    جزاك الله خيرا اخي الكريم

    انا عن نفسي بستخدم داله intval للارقام وبستخدم الداله دية

    كود PHP:
    function insert_safe($string)
    {
    return 
    htmlspecialchars(mysql_real_escape_string(trim($string)));

    عند ادخال الي القاعدة او العرض منها





    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com

  7. #7
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    32


    الله يعطيك العافية

    فكر برمجي متميز ..

    وموضوع يستحق الاشادة

    ولكن هل تُطبق هذه الاجراءات مع جميع البرمجيات

    اعتقد ان القليل جداً يطبقها في حال كون الاعمال بزنس وتستحق ..

    اما في الاعمال البسيطة احيانا ستكلف وقت اكثر بكثير من قيمة البرمجة

    ولك التحية والتقدير






  8. #8
    عضو سوبر نشيط
    تاريخ التسجيل
    Aug 2007
    المشاركات
    627


    معلومات قيمة
    جزاك الله كل خير





    __________________


  9. #9
    عضو نشيط
    تاريخ التسجيل
    Mar 2008
    المشاركات
    283


    موضوع رائع بارك الله فيك أخي محب لله ورسوله مجروح سابقا






  10. #10
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947


    جزاك الله خيرا على هذا التنبيه .
    لا تنسي ان دالة mysql_real_escape_string كافية لحماية اي مدخل لقاعدة البيانات من sql injection
    لا تكفي ..





    التعديل الأخير تم بواسطة مهندس مصرى ; 26-07-2009 الساعة 11:13 AM
    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير

  11. #11
    عضو نشيط جدا
    تاريخ التسجيل
    May 2006
    المشاركات
    477


    شكراً لك محب الله و رسوله علي الدرس الذي يوضح للجميع فكرة الحماية ،

    سؤال خارجي : هل انت صاحب شبكة كتاب العرب ؟





    __________________
    أحمد عبد الفتاح
    www.servmix.com
    لمراسلتي : admin@servmix.com


  12. #12


    جزاك الله خيرا على هذا التنبيه .


    لا تكفي ..
    هل يمكنك من ادخل تعليمة سكول تنفذ بالداخل بعدما تمررها علي هذه الدالة
    اتمني التوضيح
    لاحظ معي انا اتكلم عن sql injection اي يكفي تعطيل ال " و ' ولا تختاج لتعطيل الجافا سكربت ورموزها وغيرها





    __________________
    السيف أصدق أنباء من الكتب

  13. #13


    شكراً لك محب الله و رسوله علي الدرس الذي يوضح للجميع فكرة الحماية ،

    سؤال خارجي : هل انت صاحب شبكة كتاب العرب ؟
    انا محب الله ورسوله هناك اخي
    هل هناك مشكلة ما





    __________________
    السيف أصدق أنباء من الكتب

  14. #14
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947


    هل يمكنك من ادخل تعليمة سكول تنفذ بالداخل بعدما تمررها علي هذه الدالة
    اتمني التوضيح
    لاحظ معي انا اتكلم عن sql injection اي يكفي تعطيل ال " و ' ولا تختاج لتعطيل الجافا سكربت ورموزها وغيرها
    أنا معك
    وقد كنت فعلاً أعتقد ذلك حيث كنت اكتفي بها في تمرير المدخلات لكن كانت المفاجأة أنه في أحد البرمجيات الخاصة بي تم اختراقها من خلال هذا الاستغلال :
    كود PHP:
    index.php?type=news+and+1=-1+union+select+1,concat_ws(0x3a,username,password),3,4,5,6+from+admin 
    وهو لا يحتوي على اي ' او " .. ومن بعدها اصبحت لا أكتفي فقط بال mysql_real_escape_string
    وفعلا قمت بتجربتها عملياً مع تمريرها على mysql_real_escape_string وكذلك على strip_tags وللاسف كانت فعّالة لانها لا تدخل في نطاق شروط هذه الدوال





    التعديل الأخير تم بواسطة مهندس مصرى ; 27-07-2009 الساعة 02:02 AM
    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير

  15. #15
    عضو نشيط
    تاريخ التسجيل
    Jun 2003
    المشاركات
    291


    أنا معك
    وقد كنت فعلاً أعتقد ذلك حيث كنت اكتفي بها في تمرير المدخلات لكن كانت المفاجأة أنه في أحد البرمجيات الخاصة بي تم اختراقها من خلال هذا الاستغلال :
    كود PHP:
    index.php?type=news+and+1=-1+union+select+1,concat_ws(0x3a,username,password),3,4,5,6+from+admin 
    وهو لا يحتوي على اي ' او " .. ومن بعدها اصبحت لا أكتفي فقط بال mysql_real_escape_string
    وفعلا قمت بتجربتها عملياً مع تمريرها على mysql_real_escape_string وكذلك على strip_tags وللاسف كانت فعّالة لانها لا تدخل في نطاق شروط هذه الدوال
    لو كنت تضع '' حول الاعداد في استعلامك لكانت كافه....
    لكن على أي حال مافيه منطق في استخدام mysql_real_escape_string اذا كان المدخل integer

    بالنسبه للموضوع جميل لكن اختلف معه في اجزاء بسيطه

    - لابد نفصل بين مبدأ التحقق من المدخلات input validation و تنظيف المخرجات outputs validation او sanitization بمعنى
    اذا ادخل مستخدم NOTANEMAIL#SOETHING كبريد الكتروني... يجب رفض المدخل (بشكل عام المفروض نعالج injections هنا)
    اما اذا ادخل <script> كجزء من الرساله... هذا مقبول لكن عند عرضها تعرض كـ &lt;script&gt; (المفروض نحل مشكل xss هنا)

    اما الداله اللي تتكلم عنها... مشكلتها اكبر من مسأله انها تثقل الصفحه... (غالبا) يكون فيه ثغره اذا اعتمدت على الاسلوب هذا فقط










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

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

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