تغطية مباشرة لديمو كامب دبي 3
هل تقترح تمديد مسابقة سوالف كاست؟

 

العودة   سوالف سوفت > قسم تطوير وبرمجة المواقع للمتقدمين > PHP
المدوّنات البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

رد  
 
LinkBack أدوات الموضوع
عضو نشيط
تاريخ التسجيل: Sep 2006-
#1 (permalink)  
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 خرج قبل تنفيذ الداله .. و بالتالي ظهر هذا الايررور و لم يقم بتغيير رقم السيشن . مما سبب لي عملية تدهور و حتم علي اني اعيد ترتيب البرمجه من جديد لتتناسب معها

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


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

ArabsPoject !






__________________
PHP Coder -- I Love PHP
ArabsProject غير متواجد حالياً   قديم 07-04-2008, 06:44 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2007-
#2 (permalink)  

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

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






EbNCaNa متواجد حالياً   قديم 07-04-2008, 06:55 PM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: Apr 2002-
#3 (permalink)  

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

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






__________________
I Love PHP (d4d@hotmail.com)
http://www.daif.net/
daif غير متواجد حالياً   قديم 07-04-2008, 10:44 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2006-
#4 (permalink)  

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

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

كود 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 . وبالتالي حتي عندما تقوم بتسجيل دخولك عن طريق الرابط الذي أرسله المهاجم, فإن معرِّف الجلسة الذي أرسله لك سيتغير وبالتالي يصبح معرِّف جلستك مجهولاً لديه. وهكذا أنت أفسدت عليه محاولة اختراقك

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

كود 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'];
?>
ملحوظة: قمت بتعريف متغير تأكيدي داخل الشرط وذلك حتي لا يتم تغيير معرِّف الجلسة مع كل تحديث للصفحة.

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

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






التصميم غير متواجد حالياً   قديم 08-04-2008, 12:26 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2006-
#5 (permalink)  

السلام عليكم

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

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

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






__________________
PHP Coder -- I Love PHP
ArabsProject غير متواجد حالياً   قديم 08-04-2008, 02:07 AM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Nov 2005-
#6 (permalink)  

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






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

"جديد" أكبر مركز تحميل عربي
WwW.U111U.CoM
دليل المواقع المرئية الأول عربيا
9mbc.com
هل صليت على النبي !!
اقرب للحقيقه ستهرب من العراق مثل الجرذان
9mbc غير متواجد حالياً   قديم 08-04-2008, 02:39 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2006-
#7 (permalink)  

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

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

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






الملفات المرفقة
نوع الملف: pdf session_fixation.pdf‏ (404.6 كيلوبايت, المشاهدات 91)
__________________
PHP Coder -- I Love PHP
ArabsProject غير متواجد حالياً   قديم 08-04-2008, 05:03 PM
رد مع اقتباس
رد


 

أدوات الموضوع

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

كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة


المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
[عرض خاص]: حماية معتمدة متكاملة لاعمالك الالكترونيه + تمتع بالخصم الان لفترة محدده ! SecurityWay قسم تبادل خبرات الاستضافة 12 10-02-2006 01:25 AM
[عرض خاص]: حماية معتمدة متكاملة لاعمالك الالكترونيه + تمتع بالخصم الان لفترة محدده ! SecurityWay خدمات البيع والشراء والإعلانات التجارية 0 10-05-2005 02:52 PM
استفسار بخصوص دالة عرض عدد مايحتوية قسم معين حرالشمال PHP 3 02-01-2005 03:58 PM
بخصوص دالة print تلال الامارات PHP 2 09-10-2004 06:27 AM
جالب الاخبار لموقعك man تطوير الويب 3 24-02-2002 09:55 PM


الساعة الآن: 06:34 PM بتوقيت المملكة العربية السعودية