با سلام خدمت دوستان
من شنیدم که بعضی افراد سشن رو درون دیتابس ذخیره می کنند و دلیلشون هم اینه که امنیت بالاتر است .
میخاستم بدونم چرا امنیتش بالاتره و چه فرقی داره؟؟؟
و اینکه مدیریت این سشن چطوری میشه؟
با سلام خدمت دوستان
من شنیدم که بعضی افراد سشن رو درون دیتابس ذخیره می کنند و دلیلشون هم اینه که امنیت بالاتر است .
میخاستم بدونم چرا امنیتش بالاتره و چه فرقی داره؟؟؟
و اینکه مدیریت این سشن چطوری میشه؟
خب دسترسی به دیتابیس توسط هکرها خیلی مشکل تر از دسترسی اونها به فایل های سیستم هست به همین دلیل امنیت بالاتری داره
1) برخی سایت ها که نیاز دارند به جای یک سرور واحد، چند سرور داشته باشند به خاطر یکپارچگی باید session ها را در دیتابیس ذخیره کرد.
2) کارایی (معمولاً) بالاتر
3) امنیت بیشتر در هاستهای اشتراکی
[منبع]
یکسری امتیازات دیگه هم داره. مثلاً بدونیم کی آنلاینه. چندتا آنلاین داریم! توسط مدیر، یکی رو Logout کنیم (سشنش رو پاک کنیم و اصطلاحاً بندازیمش بیرون)، ببینیم یک کاربر از چند جا یا با چند مرورگر و... همزمان بیش از یکبار لاگین نکرده باشه و...
ببینید، اگه شما با لاگین کردن کاربر، شناسه کاربریش رو توی سشن ذخیره کنید، کافیه وقتی میخواد لاگین کنه، یک کوئری بزنید ببینید این نام کاربری الآن توی جدول سشنها دارای رکوردی هست که Expire نشده باشه یا نه. باز هم بنظرتون عملی نیست؟
بنظرتون این کار مشکلی در حالات مختلف بوجود نمیاره؟مثلا کاربر انلاین هست برق میره ایا سشن نابود میشه یا خیر هنوزم هست؟
اگر سشن نابود نشه باز وقتی خواست لاگین کنه سیستم بهش گیر میده میگه شما لاگین هستید باید منتظر بمونه تا سشن اتوماتیک expire بشه در صورتی که چنین مکانیزمی باشه که مثلا اگر 10 دقیقه با ای دی کار نکرد سشن اتوماتیک اکسپایر بشه
تو بعضی از سیستم ها این قابلیت تعبیه شده اما بعضی سیستمای دیگه نه
واسه همین یکم فکر کنم دست برنامه نویسو میبنده
البته همه ی این افکار تا اونجایی بود که علمم قد میداد !
آخرین ویرایش به وسیله omidabedi : یک شنبه 31 فروردین 1393 در 22:03 عصر
از چه لحاظی ؟3) امنیت بیشتر در هاستهای اشتراکی
از لحاظ اینکه مسیر پیشفرض ذخیره شدنش در دسترس بقیه است ولی می توان با session.save_path مسیرش رو به صورت دستی به جایی که فقط خودتون دسترسی دارید تعیین کنید.از چه لحاظی؟
http://www.supernifty.org/blog/2008/...hosting-hack-3
و
http://phpsec.org/projects/guide/5.html رو هم یه نگاه بندازید.
این حرف یعنی نقض امنیت که مربوط میشه به تنظیمات هاست که ربطی به ما ندارد ولی باز موظفیم که تا حد ممکن بررسی کنیم و جلوی بروز مشکل را بگیریم.از لحاظ اینکه مسیر پیشفرض ذخیره شدنش در دسترس بقیه است
اصلا بحث هایی نظیر "به دلیل غیر امن بودن پوشه سشن و یا ..." اشتباه است ! چراکه اگر هکر به پوشه سشن شما دسترسی پیدا کند یعنی سایت شما هک شده و این باگ هست.
و همچنین این حرف که در دیتابیس بگذاریم امن تر هست هم اشتباه هست چراکه ممکن هست مانند بالا که هکر تونسته پوشه سشن شما را بخونه، جدول شما را هم بخونه و باز میشه یک باگ.
در واقع ما داریم با این بحث ها به هر یک از روش های ذخیره سازی سشن درصد امنیت می دهیم که اینکار بستگی به برنامه ما دارد نه درصد امنیت. البته درصد امنیت هم کمی تاثیر گذار هست.
برای اینجور مواقع هم راهکار هست. مثلاً توی Gmail میاد پیام میده شما الآن با فلان IP هم لاگین هستین و اگه میخواین، اون یکی رو بندازم بیرون و برای این کار ازتون سؤال امنیتی و... رو میپرسه.
بهرحال خواستم بگم امکان انجام چنین کارهایی هم از امتیازات مدیریت دستی سشنهاست (حالا چه تو دیتابیس، چه توی فایلهایی توی مسیری که خودمون تعیین میکنیم). دیگه اینکه کی و کجا و چطور از این قابلیتها استفاده کنیم، بستگی به تجزیه و تحلیل خودمون داره و البته ارتباطی هم به موضوع تاپیک نداره که اینجا بخوایم پیگیریش کنیم.
بنظرم این حرفتون کمی اشتباه باشه چون لزوماً ممکنه یک هکر دسترسی پیدا نکنه بلکه یک نفر که روی همون هاست اشتراکی، سرویس خریداری کرده دسترسی پیدا کنه (یکی از راههای هک کردن هم همینه و یکی از دلایل اینکه میگن امنیت سرور اختصاصی بیشتره هم همین مسئله است). بهرحال توی هاست اشتراکی همه کاربران به پوشه سشن دسترسی دارن ولی اگه هاست به خوبی تنظیم شده باشه، با Permission میشه جلوی دسترسی کاربران سرور رو به فایلهای سایر کاربران گرفت. اگه سرور ویندوز باشه هم که دیگه کویته!
نه بحث IP هست. چند روز پیش با V-P-N وصل بودم (توی موبایل). اومدم با PC هم وصل شدم و بهم گفت ایمیل شما الآن توی امریکا هم لاگین شده. میخواین رمزتون رو عوض کنید (ضمن بیرون انداختن اون کلاینت) یا نادیده میگیرین؟
من قبلا که یک هاست اشتراکی داشتم، پوشه سشن ام داخل خود هاستم بود یعنی خارج از public_html .
استاد دیگه کسی که از هر طریقی بدون اجازه صاحب هاست به اطلاعاتی که به وسیله روش های امنیتی محافظت می شود دسترسی پیدا کند هکر نامیده میشود.لزوماً ممکنه یک هکر دسترسی پیدا نکنه بلکه یک نفر که روی همون هاست اشتراکی،
اینطوری هم میشه که مثلا دو نفر در هاست اشتراکی به نام های A و B هاست دارند.
هکر shell را در هاست A طزریق می کند و از طریق هاست A هاست B را هم مورد حمله قرار می دهد.
همه هاستها اینطوری نیستن و فقط برخی از هاستهای اشتراکی این مسائل امنیتی رو رعایت کردن (البته خوشبختانه روز به روز تعدادشون داره بیشتر میشه). بخاطر همین هم بود که من سایر امتیازها رو هم گفتم که بدونیم ذخیره سشن در دیتابیس فقط بخاطر امنیت نیست.
بله میشه اینطوری هم به قضیه نگاه کرد. فقط منظور من این بود که ممکنه اون کسی که به اطلاعات شما دسترسی پیدا میکنه، واقعاً یک هکر (کسی که کارش همیشه نفوذ کردن به سایتهای دیگه است) نباشه و برحسب اتفاق بتونه دسترسی پیدا کنه و اگه اطلاعات سایتتون ارزشمند هست، بهتره برای امنیتش خودتون هم دست بکار بشین. کسی که توی خونه اش اشیاء قیمتی داره، فقط به بودن پلیس در شهر اکتفا نمیکنه و برای منزلش درب ضد سرقت و دزدگیر و... هم تهیه میکنه.کسی که از هر طریقی بدون اجازه صاحب هاست به اطلاعاتی که به وسیله روش های امنیتی محافظت می شود دسترسی پیدا کند هکر نامیده میشود.
اینطوری هم میشه که مثلا دو نفر در هاست اشتراکی به نام های A و B هاست دارند.
هکر shell را در هاست A طزریق می کند و از طریق هاست A هاست B را هم مورد حمله قرار می دهد.
این مورد برای زمانی استفاده می شود که نشود با یک نام کاربری دو نفر همزمان لاگین کند،
من برای یک بانکی کنسول مانیتورینگ نوشتم انها می گفتن که نباید دو نفر بتونن با یک نام کاربری لاگین باشن( اگر نفر دوم لاگین کرد نفر اول باید logout بشه)
برای حل این مشکل من از روش دخیره کردن تو دیتا بیس استفاده کردم که جواب داد، هر بار که user لاگین می کرد سیشن عوض میشد.
سوال رو یه پست دیگه پرسیدم دوستان این پست رو معرفی کردن جواب بعضی سوالات رو گرفتم بعضی دیگه رو نه مخصوصا بحث بهینه سازی سایت چون منابع سرور هم محدود هستند هرچند امنیت سایت خیلی مهمهسلام
خیلی جاها رو گشتم و مطالعه کردم راهها زیادی واسه امنیت سشن ها معرفی کرده بودند ولی دوتا راه بود که بیشترین استفاده رو ظاهرا دارند یکی کد کردن اطلاعات درون خود سشن هاست یکی دیگه ذخیره سشن ها درون دیتابیس و جلوگیری از ایجاد فایل سشن در پوشه tmp
این روشها هم بیشتر به خاطر اشتراکی بودن سرورها مد نظره وگرنه در سرورهای اختصاصی و مجازی بحث فرق می کنه منظور بنده هم همین سرورهای اشتراکی هست.
البته یه راه دیگه هم هست اینه که از ip و اطلاعات سیستم طرف کمک بگیریم و یک سش که محتویاتش اطلاعات سیستم یا ip و... کاربره که همیشه اونو چک می کنیم و در صورت مغایرت کاربر باید دوباره لاگین کنه که راه ساده و میتونه تا حدودی مفید باشه
اما کد گذاری اطلاعات خب ما باید اطلاعات رو به نوعی کد گذاری کنیم بر فرض با sha256 حالا یک salt هم بزاریم تنگش واسه محکم کاری اما این روش هم واسه بررسی نیاز داره هر سشن به دیتابیس رجوع کنیم تا به طور مثال username رو بگیریم هش کنیم و با مقدار سشن بررسی کنیم .حالا راه دیگه ایی هست بگید ممنون میشم
راه دیگه ذخیره کامل سشنها در دیتابیس هست که اون هم نیاز به رجوع کردن به دیتابیس هست
وقتی داریم از سشن ها استفاده می کنیم یکی از دلایلش می تونه عدم مراجعه مکرر به پایگاه داده باشه اگه قرار باشه هربار که سشنی رو بررسی می کنیم چه دلیلی داره از سشنها واسه ذخیره سایر دادهها استفاده کنیم؟ از همون دیتابیس مستقیما واکشی می کنیم.
یه سوال دیگه،سایتهای که سیستم ثبت نام دارن اکثر امکانات سایت رو در اختیار کاربران ثبت نام کننده قرار میدن حالا وقتی یک سایت 90% صفحاتش اینجوری قابل دسترسه ایا این رجوع اضافی واسه سش به پایگاه داده کار درستیه؟
وقتی داریم از سشن ها استفاده می کنیم یکی از دلایلش می تونه عدم مراجعه مکرر به پایگاه داده باشه اگه قرار باشه هربار که سشنی رو بررسی می کنیم چه دلیلی داره از سشنها واسه ذخیره سایر دادهها استفاده کنیم؟ از همون دیتابیس مستقیما واکشی می کنیم.
یه سوال دیگه،سایتهای که سیستم ثبت نام دارن اکثر امکانات سایت رو در اختیار کاربران ثبت نام کننده قرار میدن حالا وقتی یک سایت 90% صفحاتش اینجوری قابل دسترسه ایا این رجوع اضافی واسه سش به پایگاه داده کار درستیه؟
مطمئنید به راحتی سشن میتونید فقط با دیتابیس بحث لاگین و لاگ اوت کاربر و اینکه الان لاگین هست یا نه رو مدیریت کنید؟ توی هر صفحه چطور میخواین بفهمین کاربر لاگین شده یا نه؟ اگه مرورگر رو بدون کلیک روی لینک خروج از سایت بست، چطور میخواین بطور خودکار سشن رو Expire کنید؟ از Cron استفاده میکنید تا کاربرانی که فرضاً 20 دقیقه است کاری نکردن رو پیدا کنید و بندازین بیرون؟ فکر نمیکنید این کار دردسر زیادی داره و باعث میشه همه جای برنامه نگران این مسئله باشین و از تمرکز روی منطق اصلی برنامه دور بشین؟
رجوع به دیتابیس وقتی موتور دیتابیس و موتور PHP روی یک سرور هستن، آنچنان بار اضافه ای ایجاد نمیکنه. بعلاوه مجبور نیستین با دیتابیس کار کنید. میتونید با همون سیستم فایل کار کنید ولی پوشه ذخیره سازی سشن رو عوض کنید و توی سایت خودتون بیارین و از پوشه مشترک استفاده نکنید. مهم، ایده استفاده نکردن از تنظیمات پیشفرض سشن توی هاستهای اشتراکیه.یه سوال دیگه،سایتهای که سیستم ثبت نام دارن اکثر امکانات سایت رو در اختیار کاربران ثبت نام کننده قرار میدن حالا وقتی یک سایت 90% صفحاتش اینجوری قابل دسترسه ایا این رجوع اضافی واسه سش به پایگاه داده کار درستیه؟