آیا دسترسی برای هکر به فایل SESSION وجود دارد (امنیت و تنظیمات سشن)
امکان دستیابی و ایجاد تغییر در فایل SESSION از طرف کلاینت وجود داره یا نه ( درصورت حرفه ای بودن طرف چطور (هکر) ؟ )
اگه وجود داره راه جلوگیریش چیه ؟
در هاست های اشتراکی اگر دسترسی به پوشه ی tmp توسط بقیه افرادی که هاست دارن رو اون سرور , باشه میتونن به فایل سشن دسترسی داشته باشن ولی در غیر اینصورت از طرف کلاینت اگه حملات session hijacking یا session fixation ... صورت بگیره که اغلب از طریق باگ های خود برنامه صورت میگیره , کاربرها میتونن session id و session name رو در کوکی ست کنن و دسترسی بگیرن.
برای مورد اول میتونین سشن رو بجای استفاده از فایل , در دیتابیس ذخیره کنید و کنترل و مدیریت سشن از طریق دیتابیس صورت بگیره.
اما موارد بعدی واسه امنیت سشن میتونین از تغییر session_name و دستوراتی مثل session_regenerate_id و ... استفاده کنید.
sessio name ثابتیه که توسط این به مقدار session id دسترسی داره و مقدار آیدی در اون قرار میگیره.بطور پیش فرض برابر PHPSESSID هست.
اگر به کوکی های ذخیره شده نگاه کنی , میبینی یک کوکی بنام PHPSESSID در کوکی ها ذخیره شده و مقدارش برابر یک سشن آیدی منحصر بفرد هست.
فایل های سشن کاربرها بطور پیش فرض در فولدر tmp ذخیره میشه و توسط session id یونیک که تولید میشه , اون فایل برای هر کاربر قابل دسترسی هست. سشن آیدی یک رشته ی 32 کاراکتریه یونیک هست.
زمانی که مرورگرو باز میکنید و سشن استارت اجرا میشه یک فایل بنام session id جدیدی که تولید میشه(با پیشوند sess_) تولید میشه و در کوکی مرورگر شما ذخیره میشه و توسط همین کوکی به فایل مورد نظرتون دسترسی دارید.اما با بستن مرورگر و دوباره باز کردن مرورگر یا باز کردن مرورگر دیگه ای , مجددا سشن آیدی جدیدی تولید میشه و شما به فایل قبلی که ساخته شده بود دسترسی ندارید.پس نتیجه اینکه شما توسط اون سشن آیدی به فایل سشن و متغیر های ذخیره شده ی اون دسترسی میگیرید.
یعنی اگر کاربر دیگه ای مقدار سشن آیدی شمارو داشته باشه یا کش بره میتونه به فایل شما دسترسی بگیره.
یه سری تنظیمات php داره واسه سشن که بد نیت بدونید:(این تنظیمات در فایل php.ini وجود داره)
session.use_only_cookies = 0
اگر این مقدار صفر باشه و در صورتی که کوکی کاربر غیر فعال باشه , دیگه برای دسترسی به سشن از کوکی استفاده نمیشه. و در صورتی که session.use_trans_sid = 1 (بهتره 0 باشه) باشه , متغیر سشن به آدرس لینکها اضافه میشه.یعنی انتهای لینک به این شکل در میاد:
example.com/index.php?PHPSESSID=رشته ی 32 کاراکتری سشن آیدی
در فرم ها هم یک input بصورت hidden تولید میشه و مدیریت سشن بصورت خودکار انجام میشه.
اما اگر مقدار session.use_only_cookies برابر "یک" باشه , خوب با از کار افتادن کوکی , سشن هم از کار میفته.
یک نکته ی دیگه برای سشن اینه که session.cookie_httponly فعال باشه برای اینکه از طریق حملات Xss و با دستورات Js و ... سشن ها مورد دستیابی قرار نگیرن و راه انتقال کوکی توسط مرورگر و پروتکل Http/s انجام بگیره.
تنظیمات زیادی داره سشن که میتونی از فایل php.ini ببینی مثل session.save_handler = files که بطور پیش فرض مدیریت سشن روی فایل ها صورت میگیره و .....
نکته ی آخر دستور session_regenerate_id() (بهمراه پارامتر true) هست که در صفحه ای که قرار میدی با هر بار اجرای این دستور session id کاربر تغییر میکنه و فایل سشن کاربر با همون محتویات قبلی نام جدیدی بخودش میگیره و فایل قبلی دیگه کاربردی نداره و اگر کاربر دیگه ای سشن شما رو کش رفته باشه دیگه اون سشن قبلی دستشه وکه عملا کاریرو صورت نمیده.
سلام مجدد.
زمانیکه session_regenerate_id رو صدا میزنید , فایل جدیدی تولید میشه و آیدی جدید و بهمراه محتویات قبلی.این تابع یک پارامتر به نام $delete_old_session داره که مقدار پیشفرض برابر false هست و شما این رو باید برابر true قرار بدید تا سشن قبلی حذف شود.
یعنی به این شکل استفاده کنید:
session_regenerate_id(true);
اما یک نکته ی دیگه بگم در مورد مطالب پست قبلیم.
ببینید اگر session.use_trans_sid برابر 1 باشد در موردش صحبت کردیم.احتمال session fixation در این حالت وجود دارد.
همونطور که گفتیم لینک ها به چه شکل میشن , واسه همین هکر میتونه آدرسی به شکل زیر تولید کنه:
example.com/index.php?PHPSESSID=123
و کاربر قربانیرو به هر شکلی مجبور کنه تا لینک مثال بالارو باز کنه.
زمانیکه کاربر قربانی لینک بالا رو باز کنه , سشنی با نام 123 با محتویات سشن قبلی کاربر تولید میکنه.انگار سشن regenerate شده.
میتونید روی لوکال تست کنید و فایل tmp رو ببینید. بنابراین با این کار هکر میتونه دسترسی بگیره.
پس بهتره session.use_trans_sid همون صفر باشه که پیشفرض هم صفره.
البته session_regenerate_id با پارامتر true از بروز مشکل در این حالت(session fixation) هم جلوگیری میکنه.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .