PDA

View Full Version : سوال: کاربر میتونه مقدار session رو تغییر بده ؟



mamali-mohammad
پنج شنبه 30 آذر 1391, 00:53 صبح
سلام
بعد از لوگین این اتفاق میافته :

$_SESSION['username']=$username;

بعدش اطلاعات رو از دیتابیس اینطوری میکشم بیرون :

$user=$_SESSION['username'];
$sql=mysql_query("SELECT * FROM `user` WHERE `username`='$user'");
$row=mysql_fetch_array($sql);
$name=$row["username"];

کاربر میتونه مقدار session رو تغییر بده و usernmae رو تغییر بده ؟!!

nsco_nsco
پنج شنبه 30 آذر 1391, 02:11 صبح
سلام چطور میتونه تغییر بده؟

Unique
پنج شنبه 30 آذر 1391, 02:51 صبح
ببینید session ها از طریق کوکی با مقدار PHPSESSID شناسایی میشوند ! حالا اگه کسی به هر طریقی بتونه PHPSESSID شخص دیگه ای را به دست بیاره میشه همون شخص ، مثلا شما اگه https نداشته باشین (منظورم ssl) خوب یه نفر میتونه بفهمه شما دارین چه PHPSESSID هایی را ارسال میکنید و در واقع اونها را Hijack میکنه ، اما در مورد مقادیر خود session ها چون روی سرور خودتون ذخیره میشوند امکان تغییرش نیست مگه اینکه خود سرور شما هک بشه ! حملات XSS هم میتونه باعث hijack شدن session بشه!

یکی از راه هایی که توصیه میشه اینه که session_id را با ip و user-agent برای هر شخص ذخیره کنیم و اینطوری attacker حتما باید همون browser و ip را استفاده کرده باشه و امنیت بالا میره !
اما همچنان بهترین راه ssl هستش.

eshpilen
پنج شنبه 30 آذر 1391, 08:31 صبح
متاسفانه امنیت فایلهای سشن در سمت سرور همیشه مورد اطمینان نیست.
کاربری که روی سروری مشترک با سرور شما اکانت داشته باشه ممکنه بتونه محتویات فایلهای سشن رو بخونه و حتی دستکاری کنه.
البته این به کانفیگ سرور برمیگرده و بنده این مشکلات رو حداقل چند سال پیش دیده بودم. شاید الان این مسئله دیگه دیده نشه یا حداقل خیلی کمتر موجود باشه با توجه به نسخه های جدید و نرم افزارهای جدیدی که برای نصب و پیکربندی خودکار هاستهای اشتراکی استفاده میشن. ولی بهرحال برای امنیت نمیشه ریسک کرد و روی حدس و تصادف حساب کرد.

درکل هم سشن PHP سیستم جالبی نیست بنظر بنده و بهتره ازش نهایت فقط برای کارهای موقتی و دارای اهمیت امنیتی کمتر استفاده بشه؛ مثلا ذخیرهء ذخیرهء هش کپچای فرمها، آپشن های نمایشی و غیرامنیتی کاربر، و کلا اینطور کاربردهای نه چندان مهم.

برای لاگین و احراز هویت من شخصا سشن رو قبول ندارم.
البته بنده یک سیستم رمزگذاری برای سشن طراحی کردم که امنیت اون رو درحد وحشتناکی بالا میبره و بیشتر نقاط ضعف امنیتی اون رو برطرف میکنه، ولی با این حال بازم ترجیح دادم برای لاگین و احراز هویت و کلا کارهای امنیتی از ذخیره در دیتابیس بجای ذخیره در سشن استفاده کنم.

ضمنا سیستم سشن PHP ضعفهای غیرامنیتی هم داره و کلا برای بیشتر کارهای حرفه ای و دقیق که نیاز به کنترل و تنظیمات کامل و دقیق دارن پیچیدگی بیش از حد اضافه میکنه و تنظیمات زیادی داره که تنظیم دقیق همهء اونها دنگ و فنگ داره و تداخل بین برنامه ها با تنظیمات مختلف سشن هم ممکنه پیش بیاد.

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

ولی البته برنامه نویسانی که اونقدر دانش و بینش ندارن که خودشون یک سیستم قوی تر و امن تر رو با اطمینان کافی طراحی کنن، شاید استفاده از سشن براشون عاقلانه تر باشه.
یعنی شما باید اینقدر سواد امنیتی و غیرامنیتی داشته باشید که فراتر از امکانات زبان و طراحان اون برید. کار راحتی نیست و هرکسی چنین سوادی نداره.

Unique
پنج شنبه 30 آذر 1391, 14:09 عصر
البته مشکلاتی که session ها داشتند توی نسخه های جدید php و apache تا حد زیادی بر طرف شده !البته سیستم سرور شما (منظورم linux server هست) خیلی مهمه که چطور پیکربندی شده باشه و کی پیکر بندی کرده باشه ! config های php و مخصوصا apache و خود Linux شما خیلی مهم هستند.

اما در کل خود من هیچوقت از session ها استفاده نمیکنم و خودم همون session را با استفاده از cookie ها با منطق امنیتی خودم اجرا میکنم ، اتفاقا اصلا هم کار سختی نیست ولی باید بدونین چیکار دارین میکنین.

mamali-mohammad
پنج شنبه 30 آذر 1391, 14:47 عصر
ممنون از دوستان
پس به طور کل نتیجه اینه که هیچ کاربری در حالت عادی ( نه دزدیدن کوکی ) توانایی تغییر مقدار session رو نداره
مثلا طرف نمیتونه با نام کاربی Ali وارد بشه و بره مقدارش رو به hossein تغییر بده ؟

siavashsay
پنج شنبه 30 آذر 1391, 20:05 عصر
نه دوست عزیز ! نمیشه !
اما بازهم مقالات مربوط به session fixation و حملات php رو بخونید !
مهم هست :)

nsco_nsco
پنج شنبه 30 آذر 1391, 22:14 عصر
سلام دوستان نه نمیتونه ببینه و به نظر من سیشن خیلی بهتر از کوکی هست و من پیشنهادم این هست از سیشن استفاده کنید البته سیشن های تاریخ دار یعنی طی مدت کوتاهی بسته بشن و این رو بگم استفاده از دستورات هنر می خواهد و باید روی اینها کار کرد تا به بهترین شکل اجرا بشن موفق باشید :قلب:

eshpilen
شنبه 02 دی 1391, 11:44 صبح
سلام دوستان نه نمیتونه ببینه و به نظر من سیشن خیلی بهتر از کوکی هست و من پیشنهادم این هست از سیشن استفاده کنید البته سیشن های تاریخ دار یعنی طی مدت کوتاهی بسته بشن و این رو بگم استفاده از دستورات هنر می خواهد و باید روی اینها کار کرد تا به بهترین شکل اجرا بشن موفق باشید :قلب:
سشن هم امنیتش به امنیت session id استواره، که در سمت کلاینت و در کوکی (هم) ذخیره میشه.
بنابراین نمیشه گفت امنیت سشن از امنیت کوکی بیشتره. این گفتهء کلی و مطلق و در ضمن مبهم، معنای چندانی نداره.
امنیت بستگی به این داره که سیستم چطور طراحی بشه. به تمام جزییاتش. عمدتا به اینکه چه اطلاعاتی چطوری در کوکی ذخیره بشن. مثلا من در پروژم از کوکی و دیتابیس استفاده کردم، ولی مثل سیستم سشن، فقط کلیدها رو در کوکی ذخیره کردم. و میتونم ادعا کنم امنیت سیستمی که بنده طراحی کردم از سشن هم بیشتره، چون امنیت دیتابیس درکل بالاتره، و تنظیمات و پیچیدگی های متعدد سشن و اتکا به افراد و تنظیمات خارج از دسترس برنامه نویس توی سیستم من حذف شده.

eshpilen
شنبه 02 دی 1391, 11:48 صبح
ممنون از دوستان
پس به طور کل نتیجه اینه که هیچ کاربری در حالت عادی ( نه دزدیدن کوکی ) توانایی تغییر مقدار session رو نداره
مثلا طرف نمیتونه با نام کاربی Ali وارد بشه و بره مقدارش رو به hossein تغییر بده ؟
نه نمیتونه.
شما از همون سشن استفاده کن.
رک بگم چون اولا اونقدری دانش و مهارت نداری که خودت سیستم جایگزین امن تری طراحی و پیاده سازی کنی.
دوما برای برنامه نویسان/پروژه های عادی بیش از این انتظار نمیره و کسی وظیفشون نمیدونه.