سؤال

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

$_SESSION['user']['id'] = 123;
$_SESSION['user']['firstname'] = 'John';
$_SESSION['user']['lastname'] = 'Doe';

عند نقطة واحدة في السيناريو ، دعوة إلى الخلية الجدول باستخدام بعض زند فصول:

$sql = "SELECT whatever FROM table";
$user = $db->fetchRow($sql);

الآن هنا حيث غرابة يبدأ...بعد أن قاعدة البيانات هذه الدعوة لا تتم ، $_SESSION['user'] مجموعة قيمة فجأة تغيرت إلى الكائن الذي يتم استردادها من قاعدة بيانات الإتصال...

في الأساس: $_SESSION['user'] هو الآن نفس الكائن التي تم استردادها باستخدام fetchRow DB الطريقة التي كان من المفترض أن يتم تخزينها في المتغير $user.لم أر هذا من قبل.

الشيء الوحيد الذي يمكنني معرفة لأنه اسم المتغير $user هو نفس $_SESSION['user'] مجموعة اسم مفتاح ، بوصفها مثل اختصار أو شيء من هذا.

هل هذا نوع غريب من دورة PHP الاختصارات التي كنت قد سمعت أبدا من قبل ؟

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

تحديث: من المؤكد register_globals على.شكرا على المساعدة السريعة الرجال.لا عجب كنت أرى مثل هذا التصرف الغريب.

هل كانت مفيدة؟

المحلول

يبدو وكأنه لديك register_globals تعيين في PHP.ini.إيقاف تشغيله يجب إصلاح هذه.

إذا لم يكن لديك الوصول إلى تغيير PHP.ini حل بديل هو مناقشة هنا

نصائح أخرى

تحقق مما إذا كان register globals يتم تشغيل.الوصول إلى $_SESSION هو السبيل الوحيد للوصول إلى الدورة البيانات بأمان.

Register globals قديم الميزة التي تحولت المتغيرات العالمية في المتغيرات المحلية.هذه المسألة مع أنه كان لا يمكنك بأمان أعرف من أين البيانات التي كانت قادمة من.شيء متوقع من الدورة يمكن أن يكون مع مجموعة get post أو ارتباط متغير.لذا كان من السهل جدا لتجاوز المرافق الأمنية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top