Prevent session hijacking : Introduction :
Download
Report
Transcript Prevent session hijacking : Introduction :
انتقال اطالعات بین صفحات مختلف:
PREVENT SESSION HIJACKING :
INTRODUCTION :
به عنوان مثال بحث loginکردن کاربران در سایت
وقتی کاربر در سایت وارد میشود بهتر است که یکبار اطالعاتش را وارد کند و دیگر
برای انجام هر
کاری نیاز به Loginکردن نباشد.
روش های مختلف برای ارسال اطالعات بین صفحات:
-1استفاده از فرم ها => امنیت پایین /میتوان سورس صفحات را خواند!!
-2استفاده از کوکی ها
-3استفاده از سشن ها
توضیح :2
میخوام در صفحه cookie1.phpیک متغیری را ذخیره کنم و در
صفحه cookie2.phpبرم بخونم
یکی از راه ها گفتیم استفاده از کوکی هاست ( ...نمایش در )zendstudio
??What is Cookie
به فایل متنی ساده که با ساختار داخلی
Variabel1=value1
Variable2=value2
.
.
.
اطالعات درونش ذخیره میشود.
و Clientذخیره میشود و حاال هر زمان که خواستیم (عمر کوکی تمام نشده)
این فایل روی کامپیوتر
میتوان هربار که کاربر به سایتمون مراجعه کرد تا زمانی که کوکی از بین نرفته
اطالعات درونش را خواند.
How Definition a Cookie :
;)’Setcookie(‘VariableName’,’Value
در این روش اگر مرورگر را ببندم و دوباره برم در صفحه کوکی 2پیغام خطا میده
و میگه
همچنین متغیری وجود نداره !!! (نشان دادن در محیط(zendstudio
برای کوکی طول عمر تعریف نکردم بخاطر همین با بسته شدن مرورگر
اطالعات ازبین میرود.
ایجاد طول عمر برای کوکی :
;)Setcookie(‘VariableName’,’Value’,time() + 30
)( Timeاز زمان االن سیستم و خود مرورگر مدیریت میکند.
30مثالی برحسب ثانیه است.
ایجاد طول عمر برای کوکی به روشی دیگر :
Setcookie(‘Variable’,’Value’, mktime(int hour, int minute , int second ,int month,int day,int
;))year
محل ذخیره سازی :Cookie
PageInfo => Security => View Cookie
نکته :استفاده از کوکی نباید تنها نقطه اتکا سایتمان باشد چرا که ممکن است کاربربیاد کوکی ها رو پاک کند یا در قسمت
Tools => Option => Privacy => Firefax(use custom) => Accept cookies from site
دریافت کوکی از سرور و ذخیره آن روی کالینت غیرفعال باشد در اینصورت در انتقال اطالعات بین
صفحات دچار مشکل میشویم .
یا مثآل :تیک Rememberیا متغیر خاصی را روی کامپیوتر کالینت ذخیره میکنم تا دفعات بعد
این مورد را چک کنیم اگر وجود داشت یوزر و پسورد در کوکی از آنجا میخوانم و عمل الگین اش را
انجام
میدهم و گرنه فرم الگین دوباره پر شود .
)(Forexample the Login_Cookie.php File
Create Login Form :
>”<form action = “ ” method = “post
با قانون کوکی
مثال :میخواهیم welcomeنمایش داده شود و یک لینک هم برای خروج
کاربر که الگین کرد
نقاط قوت کوکی :
طول عمر دادن – چون روی کامیوتر سرور کوکی ها ذخیره نمیشود ،فضا اشغال نمیکند-
چون هر کوکی کاربر روی کامپیوتر کالینت ذخیره میشود از لحاظ امنیتی خوبه ولی پسورد بهتر است جزء فایل
کوکی نباشد بخاطراینکه با تزریق کدهای اسکریپت میتوان کوکی های کاربر را به سرقت برد.
نکته :اینکه کوکی روی کامپیوتر کالینت ذخیره میشود دارای مزیت ها و معایبی میباشد ...
نقاط ضعف کوکی :
کاربر ممکن است استفاده از کوکی را در مرورگرش غیرفعال کند=> اگر تکیه
سایت روی
کوکی باشد دچار مشکل میشویم .
مثال عملی :در متن برنامه (الگین_کوکی) گفتیم اگر کوکی بنام الگین وجود
داشت پیغام
{))]'if (isset($_COOKIE['login
Welcomeنمایش داده شود .
;echo 'Welcome<br/>' .PHP_EOL
;echo '<a href="?action=logout">Logout</a><br/>' . PHP_EOL
}
ضمنآ کوکی ترافیک سایت را مصرف میکند.
Introduction Of Session:
از نسخه 4به بعد phpپشتیبانی از سشن بدان اضافه شد
? Whats a meaning of Session
سشن یعنی جلسه و نشست
سشن امکان ذخیره اطالعات را تا زمانی که کاربر مرورگرش را نبسته فراهم
میکند ،یعنی برخالف کوکی
سشن دیگر طول عمر ندارد!!!
طول عمر سشن وابسته به باز بودن مرورگر میباشد !!
امتیازات سشن نسبت به کوکی :
-1روی سرور ذخیره میشود ،بنابراین قابل غیرفعال شدن نیست!
-2امنیت باال – قابل سرقت رفتن نیست – مثال کوکی چون در مرورگر کالینت
ذخیره میشه براحتی هکر میتواند اطالعات کوکی افراد را کپی و در مرورگرش
ست کند و خودش را جای کاربر جا بزند.
-3سشن را میتوان در بانک اطالعاتی ذخیره کرد.
-4سشن سمت سرور ذخیره میشود در نتیجه ترافیک سایت را هدر نمیدهد!
برخالف کوکی که با هر درخواست کالینت اطالعات کوکی از سرور برای مرورگر
کالینت ارسال میشد و ترافیک سایت را هدر میداد ...
نکته :سشن برای کارش از کوکی استفاده میکند ،ولی این بدان معنا نیست که اگر کوکی
غیرفعال
شده باشد سشن کار نکند بلکه بستگی به تنظیمات PHP.iniدارد .
محل ذخیره سازی فایل های سشن:
Xamp => tmp
فایل های سشن از کجا میفهمد که هر فایل برای چه کسی است؟
جواب:سشن میاد به هر کاربر یک IDیا شناسه بنام
لحاظ میکند و این مورد را اگر کوکی فعال باشد در مرورگر کالینت ذخیره
SessionIDمیکند
SessionID
کد 32رقمی
]’$_COOKIE[‘PHPSESSID
به این نام
در کوکی
ذخیره
میشود ...
SessionIDرا میاد در کوکی ذخیره میکند(در واقع نام هر سشن مربوطه در کوکی ذخیره میشه)
و با هر درخواستی که کالینت میدهد سرور میاد میبینه که این سشن آیدی مثآل
sess_ut454ae2c7kdpae7au0i516h86
و همان فایل را در قسمت Tmpمیخواند و اطالعات متغیرهای درونش را میخواند =>
در این حالت اطالعات از درون سرور فراخوانی میشود و بر خالف کوکی نیاز نیست که
سرور اطالعات مربوطه ارسال نماید و...
نکته :حال اگر کوکی سمت کالینت غیر فعال باشد در نهایت عملکرد سشن بستگی به تنظیمات فایل
PHP.iniدارد .
نحوه کار با سشن :
<? Php
;)(Session_start
>?
-1اگر تا بحال سشن ای برای کاربر تعریف نشده باشد با اجرای اولین بار این
دستور،سرور میرود یک فایل سشن میسازد برای کاربر(سشن آیدی) و در
مرورگر کاربر یا کالینت نیز
PHPSESSIDقرار خواهد گرفت .
-2اما اگر کاربر سشن داشته باشد (در یکی از صفحات سایت عمل الگین
صورت گرفته باشد و برایش سشن تعریف شده باشد) و کاربر هنوز مرورگرش
را نبسته باشد ،ابتدا صفحه ای که از ناحیه کاربر به سرور درخواست داده
موردنظردارد و کالینت میشود دوباره از ناحیه سرور برای پاسخگویی به
درخواست کاربر نیاز به PHPSESSIDآیدی مورد نیاز به صفحه را برای
سرور ارسال میکند و سرور از داخل پوشه TMP
SessIDمذکور را انتخاب و متغیرهای درونش را میخواند و میریزد در آرایه
; '$_SESSION['name'] = 'Welcome ali
Session Hijacking Or
Session Fixation Attacks :
Question) Whats a meaning of Session Hijacking??
First step: HACK Forum Admin ‘s User
Second step: Solve this Problem
درباگ هایی مثل XSSاگرهکرکدهای جاوا اسکریپت را سمت سروربفرسته :
هر موقع که کد اجرا شود کوکی های کاربر به سمت آدرس خاصی که هکر
میخواهد ارسال میشود
و با ست کردن
PHPSESSID=I24332fsdjdsnfsfnskdmakdnsfs
Session_hash=fshdjshdfjsgfdskjdhasdajdad
Session_Password=13ehwefh23828eusdfhs
موارد فوق توسط هکر میتوان وارد سایت با حساب کاربری مثآل ادمین شد
و...
First step: Session Hijack
برای جلوگیری از این نوع حمالت دو راه حل وجود دارد :
1- Escape the Information
;)2- Session_regenerate_id(True Or False
; If True
مقادیر متغیرهای سشن قبلی از بین میروند ...
---------------------------------------------------------------------------------------------; If False
مقادیر سشن باقی می مانند ولی سشن آیدی را هر بار تغییر میدهد ...
if (!isset($_SESSION['CREATED'])) { $_SESSION['CREATED'] =
time(); }
else if (time() - $_SESSION['CREATED'] > 1800) { //
session started more than 30 minutes ago
session_regenerate_id(true); // change session ID for the
current session and invalidate old session ID
$_SESSION['CREATED'] = time(); // update creation time }