PDA

View Full Version : امنیت دهی به SESSION ها



sweb
پنج شنبه 11 مرداد 1386, 23:17 عصر
با سلام. خواستم بدونم که ممکنه با استفاده از cookie های ذخیره شده در مرورگر ها که توسط SESSION ها ایجاد میشه میشه یک مقدار ذخیره شده مهم مانند نام و کلمه عبور، شماره کارت اعتباری و .. رو بدست آورد. بهترین راه برای امنیت دادن به SESSION ها رو معرفی کنین.

alireza82
شنبه 13 مرداد 1386, 01:45 صبح
سلام
نه اطلاعات سشن ها روی سرور ذخیره میشن و مرورگر با sid ای که مهیا مسشه براش به اون اطلاعلت دسترسی داره و کسی نمیتونه به اطلاعات سشن دسترسی پیدا کنه مگر اینکه سرور رو هک کنه که یا بنحوی دسترسی رو سرور داشته باشه. امنیت یسن ها بیشتر روی سرور های شیر مهم میشه.
------------------------------------مقاله کامل از سایت ایران پی اچ پی-----------------------
(دوستان یه دفعه نگید این تو ایران پی اچ پی یه سهمی داره که هی مقاله هاشو میزاره ها نه به خدا فقط مقاله هاشون جالبه و من سعی میکنم هر وقت چیزی میزارن بخونم همین. و خوب چون جالب و کامل میگن هر وقت میخوام راجب مسئله ای صحبت کنم اگر مقاله ای نوشته باشن اون رو معرفی میکنم چون 100 درصد کامل تر از اون چیزی هست که من میگم. و کاربر هم گیج نمیشه)
اما برای امنیت بیشتر سشن ها:
نکته امنیتی امروز ما مربوط می‌شود به یکی از مهمترین و حساس‌ترین ابزارهای امنیتی، نوعی حمله مربوط به آن و روش پیش‌گیری از این حمله به شکلی صحیح خوب همانطور که شاید برخی از شما حدس زده‌اید امروز می‌خواهیم در رابطه با جلسه‌ها(Session) باهم صحبت کنیم:
یکی از حملات بسیار مرسوم در مجموعه حملات شناخته شده تحت وب حمله موسوم به Session fixation هست که نفوذگر در طی آن سعی دارد با شبیه جلوه دادن خود به کاربران به اطلاعات موجود در جلسه آنها دسترسی یابد. مهمترین و حساس‌ترین اطلاعات برای نفوذگر در این شرایط چیست؟ خوب همانطور که احتمالاً شما هم می‌دانید Session ID هسته اصلی این نوع نفوذ خواهد بود در واقع Session ID کلیدی است که می‌توان باداشتن آن ثابت نمود که من کاربر X و شما کاربر Y هستید و حالا اگر من کلید شما را به طریق بدست بیاورم می‌توانم خودم را جای شما جابزنم و...
خوب پس از این مقئمه برای دوستانی که می‌خواهند کمی بیشتر درمورد Session Fixation اطلاعات کسب کنند مرجع همیشگیمان http://www.wikipedia.com را پیشنهاد می‌دهم که می‌توانید توسط http://en.wikipedia.org/wiki/Session_fixation مستقیم به تارنمای دایرة المعارف ویکی‌پدیا بخش مربوط به session fixation متصل گریدد.
خوب تا ایجا متوجه شدیم که برروی هاست‌های مشترک خطری با چنین محتوی نرم‌افزار ما را تهدید می‌نماید اما به واقع چگونه می‌توان از چنین حفره‌هایی پشتیبانی کرد و راه عبور را بر نفوذگران بست، ساده است چنانچه دائما احتمال به سرقت رفتن کلید خانه شما وجود داشته باشد شما چه‌می‌کنید خوب واضح است کلید را دائماً عوض می‌کنید در اینجا نیز ما چنین می‌کنیم:




<?php
session_start();
if (!isset($_SESSION['initiated']))
{
session_regenerate_id();
$_SESSION['initiated'] = true;
}
?>


اما نکته‌ای در اینجا مطرح می‌شود و آن اینکه با رفتن به آدرس این صفحه در شاخه (پیش فرض) /tmp شما چنین چیزی مشاهده خواهد شد:
sess_82c6980017e100277a63983142fd454c
sess_a4bab88e6dfa6e900ade21e3fbd27a53
و اگر مجدداً صفحه را اجرا نمائید:
sess_984c5230acca90b5a75eddb89bb48354
sess_a4bab88e6dfa6e900ade21e3fbd27a53
sess_82c6980017e100277a63983142fd454c
و مجدداً:
sess_984c5230acca90b5a75eddb89bb48354
sess_a4bab88e6dfa6e900ade21e3fbd27a53
sess_82c6980017e100277a63983142fd454c
sess_dd88c05b724d80b30c90309847f2e919
برای اجتناب از چنین وضعیتی کافیست تا کد خود را به این شکل اصلاح نمائید:



<?php
session_start();
if (!isset($_SESSION['initiated']))
{
$_SESSION['initiated'] = true;
session_regenerate_id(true);
}

?>


این مقاله از سایت ایران پی اچ پی بود. در مورد امنیت سشن ها که همه چی رو گفته. امیدوارم بدردتون بخوره.

alireza82
شنبه 13 مرداد 1386, 01:48 صبح
راشتی تا اونجا که میدونم کوکی ای برای سشن ایجاد نمیشه بلکه یه متغیر سشن هست که به روش گت و به طور خودکار برای مرورگر فرستاده میشه که مرورگر یا بهتر بگیم سرور رو قادر میسازه تا بفهمه سشن مورد نظر این مروگر کدوم هست. چیزی به نام کوکی حداقل تا اونجایی که من میدونم اضافه نمیکنه!!! حالا اگر اساتید چیز بیشتری میدونن خوشحال میشم بدونم.

alireza82
شنبه 13 مرداد 1386, 01:52 صبح
اها یه چیز دیگه هم هست میتونید با استفاده از تنظیمات php.ini محل ذخیره سشن هاتون رو تغییر بدید . بهتره فولدری خارج از www تون باشه که همین کار هم باز امنیت بیشتری براتون میاره. خصوصا رو سرور های شیر این کار پیشنهاد میشه.
موفق باشید

oxygenws
شنبه 13 مرداد 1386, 10:23 صبح
راشتی تا اونجا که میدونم کوکی ای برای سشن ایجاد نمیشه بلکه یه متغیر سشن هست که به روش گت و به طور خودکار برای مرورگر فرستاده میشه که مرورگر یا بهتر بگیم سرور رو قادر میسازه تا بفهمه سشن مورد نظر این مروگر کدوم هست. چیزی به نام کوکی حداقل تا اونجایی که من میدونم اضافه نمیکنه!!! حالا اگر اساتید چیز بیشتری میدونن خوشحال میشم بدونم.
چرا، اضافه میشه.
سیستم سشن های PHP به صورت پیش فرض سعی می کنه کوکی بندازه روی سیستم کاربر، اگر کوکی غیر فعال بود (و این حق رو داشت) می تونه از طریق پارامتر به GET بفرسته... که ارسال به صورت GET بسیار بسیار خطرناک می باشد و شدیدا توصیه می شود اگر حتی این گزینه در فایل php.ini فعال است، آن را توسط برنامه خود غیر فعال کنید.


اها یه چیز دیگه هم هست میتونید با استفاده از تنظیمات php.ini محل ذخیره سشن هاتون رو تغییر بدید . بهتره فولدری خارج از www تون باشه که همین کار هم باز امنیت بیشتری براتون میاره. خصوصا رو سرور های شیر این کار پیشنهاد میشه.
موفق باشید
مکان ذخیره سازی هم به طور پیش فرض شاخهء temp سیستم عامل شما است (برای لینوکسجات /tmp)

alireza82
شنبه 13 مرداد 1386, 17:11 عصر
سلام
ممنونم امید جان بابت توضیحات چون من خودم فکر میکردم همیشه گت میفرسته. پس اون منبعی که قبلا ازش مطلب رو خونده بودم ناقص گفته بود.
موفق باشید

Mohajerx
سه شنبه 30 مرداد 1386, 12:04 عصر
اینکه گاهی اوقات دیده میشه یه سشن به انتهای یک url اضافه شده کار خود برنامه نویس هست یا اینکه خود سیستم بصورت خودکار اینکار رو میکنه ؟

oxygenws
سه شنبه 30 مرداد 1386, 12:17 عصر
توضیحی که من دادم رو کامل بخون.

cybercoder
سه شنبه 30 مرداد 1386, 12:42 عصر
اینکه گاهی اوقات دیده میشه یه سشن به انتهای یک url اضافه شده کار خود برنامه نویس هست

با توضیحاتی که امیدخان متقی داد کار درستی نیست که با Get بفرستی.
اما بعضی مواقع اون چیزی که در انتهای Url می بینی رو خود برنامه نویس ساخته و Session اصلی نیست که اون فرق می کنه.

موفق باشید.

musiox
پنج شنبه 01 شهریور 1386, 17:40 عصر
تو کتاب pro php security این اومده :

Session ID cookies (unlike other cookie variables) are stored only in the browser’s memory,
and are not written to disk.
توی همین کتابم راه های جلوگیری از مزاحمت آورده شده . اگه وقت کردید این کتابم بخونید خیلی عالیه .

jhoseinii
پنج شنبه 01 شهریور 1386, 18:53 عصر
با توضیحاتی که امیدخان متقی داد کار درستی نیست که با Get بفرستی.
اما بعضی مواقع اون چیزی که در انتهای Url می بینی رو خود برنامه نویس ساخته و Session اصلی نیست که اون فرق می کنه.

موفق باشید.

فکر نمیکنم همیشه اینطور باشه
چون این مورد بارها در مورد برنامه ای که خودم روی لوکال در حال نوشتنش بودم پیش اومده
فکر میکنم، این یه مشکل امنیتی و برنامه نویس موظفه این شماره جلسه رو از get حذف کنه

oxygenws
پنج شنبه 01 شهریور 1386, 20:51 عصر
جمله رو با دقت بخون:

اما بعضی مواقع اون چیزی که در انتهای Url می بینی رو خود برنامه نویس ساخته و Session اصلی نیست که اون فرق می کنه.


فکر میکنم، این یه مشکل امنیتی و برنامه نویس موظفه این شماره جلسه رو از get حذف کنه
توی php.ini گزینه ای برای این مورد هست، در قسمت سشن ها در php.ini بیشتر دقت کن.