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

الموضوع: مناقشة بخصوص دالة session_regenerate_id و حماية ال session

  1. #1
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    59

    Exclamation مناقشة بخصوص دالة session_regenerate_id و حماية ال session



    سلام عليكم


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

    هناك أمر محيرني كل مره أثناء برمجتي لبرمجياتي. لذلك أصريت علي السؤال عنه من اجل ان استفيد .. الأمر خاص بال session بال php

    السيشن الان علي حد علمي انها تخزن بمجلد مشترك و هو بالتمب بالسيرفر المستضاف عليه السكربت . و ليس جهاز المستخدم . ان فهل هناك داعي عمليةمثلاً session_regenrate_id
    فائدة الداله session_regenerate_id ا تقوم بتغيير ال id ليسيشنز المستخدم مثلاً بعد ما يقوم الدخول مثلاً بالعضوية الخاصه به بالسكربت ( او بشكل عام عند ادخاله اي بيانات بالسكربت ) تساعد في الحد من عمليات ال session hijacking و session fixation


    لكن واجهتني مشكلة عند استخدامي لها . حيث اني قمت ببرمجة دالة لتسجيل الدخول . و استخدمت دالة session_regenerate_id لتغيير رقم ال session و تسجيل بيانات العضو فيه بعد تسجيل دخوله بطريقه صحيحه .. لكن واجهت ايررور ظهر لي و اختصاره :


    Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in C:\xampp\htdocs\script\includes\functions.inc.php on line 180

    و هذا بسبب ان في صفحة ال login هناك ouput خرج قبل تنفيذ الداله .. و بالتالي ظهر هذا الايررور و لم يقم بتغيير رقم السيشن . مما سبب لي عملية تدهور :funny: و حتم علي اني اعيد ترتيب البرمجه من جديد لتتناسب معها :1power::eek3:

    فقلت أنظر لبعض السكربتات المبرمجه من بعض الأخوة المجانيه ربما تكون طريقتي خطأ
    لكن استغربت عندما تطلعت عليها ووجدت انها لا تستخدم هذه الداله


    فدار سؤال ببالي هل هناك بديل لها للحد من عمليات ال session hijacking و fixationغير استخدام هذه الداله و تغيير رقم السيشن ..

    ArabsPoject !





    __________________
    PHP Coder -- I Love PHP


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


    اخوي انا عملت برمجية سابقا وهي قوية امنيا جدا ... وما اعتقد انو الدالة المذكورة ضرورية ... لان السيشن منيعة جدا وتحفظ داخل السيرفر وما حدا يقدر يصلها الا بشق الانفس من قبل المحترفين ... بخصوص الخطأ الي طلعلك ... هل حاولت تستعمل ob_start(); قبل انا تكتب الامر session_start(); ؟؟ اذا لا حاول اكتبها وهات الجواب ...

    الى الامام اخوي .





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

  3. #3
    عضو شرف
    تاريخ التسجيل
    Apr 2002
    المشاركات
    1,379


    - من ناحية ان ملفات الجلسات تخزن في مجلد tmp الذي يصل اليه الجميع هناك حلين :
    * اما تخصيص مجلد لحفظ الجلسات لديك باستخدام الداله session_save_path .
    * او استخدام session_set_save_handler التى تتيح لك التحكم بشكل كامل في الجلسات وتخزينها في اي مكان غالبا ما يكون قاعدة البينات ..... وهو الحل الأفضل.
    * ايضا كملاحظة عليك دوما تخزين تعريف بالمستخدم في جلسته ... اقصد مثلا وضع رقم الاي بي في الجلسه بحيث لو استخدم هذه الجلسه شخص اخر ستعرف انها ليست له وتلغيها ... ممكن تعتم على بينات اخرى غير رقم الاي بي

    - الدالة session_regenerate_id تقوم بتكوين رقم جلسه جديد وهذا يعنى انها سوف ترسل cookie الى العميل يحمل رقم الجلسه الجديد .... اذا عليك معاملتها مثل setcookie بوضعها في اول الملف.





    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .

  4. #4
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    69


    السلام عليكم,

    لنري هذا المثال

    كود PHP:
    <?php
    session_start
    ();

    $_SESSION['visits'] = ( isset($_SESSION['visits']) ) ? ++$_SESSION['visits'] : 1;

    echo 
    $_SESSION['visits'];
    ?>
    قم بحفظ الكود التالي في ملف المجلد الرئيسي بسيرفرك الشخصي بإسم session.php مثلا ثم قم بنسخ الرابط التالي واستدعائه في متصفحك وقم بعمل refresh حتي يصبح الرقم الناتج 5 مثلا ..
    كود:
    http://localhost/session.php?PHPSESSID=1234
    الآن قم بغلق نافذة المتصفح وافتحه مرة أخري
    ملحوظة: لاتقم بفتح tab جديد مثلا أو ضغط CTRL+N.

    استدعي نفس الرابط في المتصفح مرة أخري. ماذا تري؟ يظهر الرقم 6 ؟
    استدعي نفس الرابط في متصفح آخر ؟ يظهر الرقم 7 ؟

    التصرف الطبيعي أن هذه جلسة جديدة فلابد أن يقوم العداد بالعد من البداية واظهار رقم 1 في كل مرة. ولكن الذي حدث هو أننا فرضنا التعامل بمعرِّف الجلسة الذي حددناه بنفسنا في كل مرة وهذه عملية الـ Session fixation

    معني ذلك أنك بمجرد تسجيل دخولك في لوحة تحكم موقعك عن طريق رابط يحتوي علي معرِّف جلسة أرسله لك مهاجم, فهو يستطيع في نفس اللحظة أن يقوم بنسخ نفس الرابط الي متصفحه والدخول الي لوحة تحكم موقعك التي سجلت أنت دخولك بها مسبقاً.

    ما الحل؟ وكيف تحمي نفسك ؟؟؟ عن طريق استخدام دالة session_regenerate_id . وبالتالي حتي عندما تقوم بتسجيل دخولك عن طريق الرابط الذي أرسله المهاجم, فإن معرِّف الجلسة الذي أرسله لك سيتغير وبالتالي يصبح معرِّف جلستك مجهولاً لديه. وهكذا أنت أفسدت عليه محاولة اختراقك :funny:

    الكود بعد التعديل

    كود PHP:
    <?php
    session_start
    ();

    if( !isset(
    $_SESSION['regen']) )
    {
        
    session_regenerate_id();
        
    $_SESSION['regen'] = true;
    }

    $_SESSION['visits'] = ( isset($_SESSION['visits']) ) ? ++$_SESSION['visits'] : 1;

    echo 
    $_SESSION['visits'];
    ?>
    ملحوظة: قمت بتعريف متغير تأكيدي داخل الشرط وذلك حتي لا يتم تغيير معرِّف الجلسة مع كل تحديث للصفحة.

    الآن قم بتنفيذ نفس الخطوات السابقة مع ملاحظة تغيير المعرِّف (أو حذف الكعكات)

    لذلك أري ضرورة استخدام الدالة






  5. #5
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    59


    السلام عليكم

    أخي EbNCaNa جزاك الله كل خير . سبحان الله . دالة ob_start رايتها مستخدمه بكثير من البرمجيات . و كنت متشوق لمعرفتها لكنني كسلت الذهاب للمانيوال بحكم اني لم احتاجها ببرمجياتي D: . و الان جاء وقتها لما انت ذكرتها . من خلال قرائتي الان السريعه عن عملها انه تقوم بعمل buffering (صد ) اي ouput الا الهيدرز فقط

    أخي daif أشكرك علي تعقيبك

    أخي التصميم .. أشكرك علي ردك و توضيحك الرائع . فعمليات ال sessin fixation و session hijacking من الأمور الهامة التي يجب التصدي لها . هناك tricks كثيره يمكن عملها لصد هذه الهجمات . لكنني فضلت استخدام طريقة تغيير ال session id





    __________________
    PHP Coder -- I Love PHP

  6. #6
    عضو فعال
    تاريخ التسجيل
    Nov 2005
    المشاركات
    1,307


    السلام عليكم ورحمه الله وبركاته
    مووضع مميز استمروا فى النقاش لانى مستمتع به





    __________________
    سبحان الله وبحمده
    سبحان الله العظيم

    "جديد" أكبر مركز تحميل عربي
    WwW.U111U.CoM
    دليل المواقع المرئية الأول عربيا
    9mbc.com
    هل صليت على النبي !!
    اقرب للحقيقه ستهرب من العراق مثل الجرذان

  7. #7
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    59


    السلام عليكم ورحمه الله وبركاته
    مووضع مميز استمروا فى النقاش لانى مستمتع به
    أشكرك أخي 9mbc فالنقاش الهادف شيء رائع

    و هذه هديه مني لجميع الأعضاء .. ملف pdf متميز يشرح ال session و الأضرار الخاصه بها session fixation and session hijacking مع الصور

    الملف بالمرفقات





    الصور المرفقة الصور المرفقة
    __________________
    PHP Coder -- I Love PHP





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

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

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