Register Globals
سلام
خوب همتون تا حالا حتما هاست خریدید. و حتما هم برنامه هایی رو دیدید که برای کار
احتیاج به متغییر هایی دارن

!!
خوب تا حالا هم حتما اسم Register Globals و تنظیم اون یعنی register_globals رو شنیدید.
امروز میخوایم در مورد تنظیم register_globals بحث کنیم و ثابت کنیم که بر خلاف تصور
این تنظیم به خودی خود یه خطر نیست بلکه نحوه به کار گیریش میتونه خطرناک باشه!!
اول یکم راجب این تنظیم توضیح بدیم. register_globals یک تنظیم php هست که میاد داده ها رو از ارایه های فوق عمومی
یعنی:
کد:
($_GET, $_POST, $_SERVER, $_COOKIE, $_REQUEST and $_FILE)
میگیره و اونها رو به عنوان متغییر های عمومی رجیستر میکنه. یعنی میاد متغییر
کد:
$_POST['message']
مثلا میگیره و اون رو به متغییر عمومی
کد:
$message
میده. که خوب همونطور که میبینید در بعضی جاها این تنظیم میتونه واقعا مفید باشه و بعضی کار ها رو ساده کنه.
که خیلی خوبه کی از ساده شدن کار ها بدش میاد!!
اما این تنظیم در نسخه های جدید php غیرفعال شده و هاستینگ ها هم فعالش نیمیکنن
و دلیل اون رو مسائل امنیتی میدونن!! کاملا هم حق دارن چرا !!
اینجاش جالبه شما فرض کنید من یه کد بزنم برا لوگین کاربر به صورت:
کد PHP:
if($_POST['username'] == 'rob' && $_POST['password'] == 'foo') {
$authenticated = true;
}
if($authenticated) {
// do some admin thing
}
اگر register_globals غیر فعال یا خاموش باشه این یه سیستم لوگین خوب و کاراست اما
فرض کنیم register_globals فعال یا روشن باشه
اتفاق جالبی که میفته اینه که اگر یه نفوذگر یا هکر یا هر چیزی که اسمش رو بزارید توی ادرس بار و بعد از نام اسکریپت تایپ کنه :
کد:
script.php?authenticated=true
اونوقت فکر کنم تا تهش رو خوندید!!
این کاربر به همین راحتی حق دسترسی گرفت. واقعا راحت تر از این نمیشد

همونطور که دیدید این تنظیم واقعا در صورت فعال بودن میتونه یه خطر بزرگ باشه! اما خود این تنظیم یه خطر بزرگ نیست
بلکه نوع کدنویسی ما خطرناکش میکنه!! و چون هاستینگ ها و حتی خود توسعه دهندگان
php نمیتونن مسئول کد نویسی دریت ما باشن این تنظیم رو غیر فعال کردن و به عنوان یه تهدید
امنیتی ازش نام میبرن که خوب حق هم دارن! اگر مسائلی رعایت نشه دقیقا این تنظیم میتونه فاجعه بار باشه!
مثلا اگر کد بالا به صورت:
کد PHP:
if($_POST['username'] == 'rob' && $_POST['password'] == 'foo') {
// do some admin thing
}
بود هیچ خطر امنیتی ای وجود نداشت و هیچ اتفاق خاصی نمیافتاد مگر اینکه کلمه عبور و نام کاربری رو نفوذگر میدونست!!
ولی با این وجود چون واقعا بعضی موقع ها آدم حواسش نیست چه جوری داره کد میزنه

بهتره این تنظیم همیشه غیر فعال باشه
تا از اینجور اتفاقات هم نیفته!
حالا فکر کنم دیگه با من هم عقیده هستید که این تنظیم به خودی خود یه تهدید امنیتی نیست اما نوع
کد نویسی ما اون رو یه تهدید امنیتی خطرناک میکنه.
موفق باشید