آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

آیا دسترسی برای هکر به فایل SESSION وجود دارد (امنیت و تنظیمات سشن)

JSONObject  9 سال پیش  8 سال پیش
+4 0

امکان دستیابی و ایجاد تغییر در فایل SESSION از طرف کلاینت وجود داره یا نه ( درصورت حرفه ای بودن طرف چطور (هکر) ؟ )
اگه وجود داره راه جلوگیریش چیه ؟

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
محسن موحد  9 سال پیش
+5 0

در هاست های اشتراکی اگر دسترسی به پوشه ی tmp توسط بقیه افرادی که هاست دارن رو اون سرور , باشه میتونن به فایل سشن دسترسی داشته باشن ولی در غیر اینصورت از طرف کلاینت اگه حملات session hijacking یا session fixation ... صورت بگیره که اغلب از طریق باگ های خود برنامه صورت میگیره , کاربرها میتونن session id و session name رو در کوکی ست کنن و دسترسی بگیرن.

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

اما موارد بعدی واسه امنیت سشن میتونین از تغییر session_name و دستوراتی مثل session_regenerate_id و ... استفاده کنید.

0 0
: یعنی یه جدول مخصوص SESSION درست کنم و هر بار که کاربر وارد شد اطلاعات SESSION رو ذخیره کنم و وقتی خارج شد حذف ؟ (9 سال پیش)
+2 0
مدیریت سشن از طریق دیتابیس انجام میشه.توضیحات کامل در سایت خود php.net اومده. لینک . یک پروژه ی چت بروش comet در همین سایت قبلا گذاشتم که مدیریت سشن از دیتابیس انجام میشه و افراد آنلاین چک میشه.میتونه اون پروژه هم کدهای session اش کمکت کنه. (9 سال پیش)
0 0
: یه توضیح کوچیکی درباره ی session_name و session_regenerate_id میدی لطفا ؟ تو سایت پی اچ پی دربارش خوندم ولی تو اگه ممکنه ساده تر بگی و اینکه کجا دقیقا باید این کد ها استفاده بشه ممنون میشم (9 سال پیش)
پاسخ به سوال 
محسن موحد  9 سال پیش
+5 0

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 کاربر تغییر میکنه و فایل سشن کاربر با همون محتویات قبلی نام جدیدی بخودش میگیره و فایل قبلی دیگه کاربردی نداره و اگر کاربر دیگه ای سشن شما رو کش رفته باشه دیگه اون سشن قبلی دستشه وکه عملا کاریرو صورت نمیده.

0 0
سپاس گذارم (9 سال پیش)
0 0
سلام ممنون از توضیحات خیلی خوبتون. فقط یه سوال! اگه از session_regenrate_id استفاده کنیم session قبلی همچنان باز میمونه و درصورتی که هکری اون id رو داشته باشه قابل استفاده است یا اینکه session قبلی از سیستم پاک میشه؟ یا درواقع همین session خودمون rename میشه؟ (9 سال پیش)
0 0
(8 سال پیش)
0 0
(8 سال پیش)
پاسخ به سوال 
محسن موحد  9 سال پیش
+1 0

سلام مجدد.

زمانیکه 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) هم جلوگیری میکنه.


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .