-
طریقه استفاده از Session_Regenerate_id
دوستان اول بگم که بنده با استفاده از این تابع مشکلی ندارم !
اما به هر حال میخوام بدونم در کجا بهتره که استفاده شه !
توی یک سایت دیدم بعد از اینکه Login موفقیت آمیز بود استفاده شده بود !
توی یک سایت دیگه باز دیدم در صفحه Logout استفاده شده !
و توی یک سایت هم دیدم که در هر 2 صفحه استفاده شده !
یعنی هم Login و هم Logout
حالا میخوام دوستان لطف کنن یه توضیح کلی - مختصر و مفید ارائه بدن ! :)
با تشکر
-
نقل قول: طریقه استفاده از Session_Regenerate_id
بالافاصله بعد از هر session_start از session_regenerate_id استفاده کنید واسه سلامتی خوبه!
خب خاصیتش چیه.
اینه که سشن آیدی طرف رو که شناختی و سشنش رو استارت کردی، بعدش میای و با session_regenerate_id سشن آیدیش رو عوض میکنی. در نتیجه اگر یه هکر به یک طریقی سشن آیدی طرف رو سرقت کرده باشه، و قبل از اینکه اون هکر بتونه از اون سشن آیدی سوء استفاده کنه کاربر واقعی یک ارتباط دیگر با سرور داشته بوده باشه، اون سشن آیدی ای که دست هکر هست بی ارزش میشه.
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
بالافاصله بعد از هر session_start از session_regenerate_id استفاده کنید واسه سلامتی خوبه!
یعنی توی همه صفحات بعد از اینکه session_start() کردیم و سشن کاربر رو گرفتیم و چک کردیم بعدش session_regenerate_id کنیم یا دقیقا بعد از کد session_start(); ؟
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
siavashsay
یعنی توی همه صفحات بعد از اینکه session_start() کردیم و سشن کاربر رو گرفتیم و چک کردیم بعدش session_regenerate_id کنیم یا دقیقا بعد از کد session_start(); ؟
آره دقیقا بعد از session_start بذارید که روزهء شک دار نشه.
جای دیگه و بعد از اینطور چکها هم شاید بشه گذاشت، اما خب نیاز به تفکر و تحلیل بیشتری داره که ببینیم مشکل امنیتی نداشته باشه، که حتی بنده هم الان تمرکز و حضور ذهن و وقتش رو ندارم. پس چرا بیخود خودمون رو اذیت کنیم؟ میذاریم بعد از هر استارت سشن بدون هیچ شرطی.
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
توی یک سایت دیگه باز دیدم در صفحه Logout استفاده شده !
موقع لاگ آوت هم خب قبلش باید session_start کرده باشه که session_regenerate_id کار کنه.
آره فکر کنم اینم از نظر امنیتی ایدهء خوبی باشه.
موقع Logout هم استفاده کنید.
البته session_destroy و اینها هم به جای خودش!!
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
البته session_destroy و اینها هم به جای خودش!!
اون که البته ! اما خوب توی یک فروم خارجی بحث سر همین بود که کجا استفاده شه !
2 نفر هم باهم بحثشون شده بود که موقع Logout بهتره و اون یکی میگفت login !
هرکدوم هم دلیل خودشون رو داشتن ! اونی که میگفت logout دلیلش این بود که بعد از لاگ اوت وقتی سشن رو عوض کنی حتی اگرم حک بشه دیگه سشن لاگین قبلی موجود نیست !
خلاصه اینجا بود که گیچ شدم دیگه !:))
-
نقل قول: طریقه استفاده از Session_Regenerate_id
سلام
جناب eshpilen چرا شما همه چی رو امنیتی می کنین .
این یه تابع خیلی ساده اس برای تغییر آی دی سشن .
خوب اگه هکر بخواد سشن آد رو سرقت بکنه ، بازم اینکار رو انجام میده و حتی با استفاده از این تابع هکر دیگه خیالش راحته که با یه بار بدست آوردن سشن آی دی کاربر واقعی دیگه نمیتونه دسترسی داشته باشه چونکه هکر با سشن آی دی سرقتی وارد میشه و با لطف این تابع سشن آی دی جدید برای هکر ارسال میشه و کل امکانات کاربری در اختیار هکر قرار میگیره .
بهتر است که موارد دیگه ای برای استفاده از این تابع اضافه بشه تا این مشکل برطرف بشه ، مثل آی پی
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
mtchabok
سلام
جناب eshpilen چرا شما همه چی رو امنیتی می کنین .
این یه تابع خیلی ساده اس برای تغییر آی دی سشن .
خوب اگه هکر بخواد سشن آد رو سرقت بکنه ، بازم اینکار رو انجام میده و حتی با استفاده از این تابع هکر دیگه خیالش راحته که با یه بار بدست آوردن سشن آی دی کاربر واقعی دیگه نمیتونه دسترسی داشته باشه چونکه هکر با سشن آی دی سرقتی وارد میشه و با لطف این تابع سشن آی دی جدید برای هکر ارسال میشه و کل امکانات کاربری در اختیار هکر قرار میگیره .
بهتر است که موارد دیگه ای برای استفاده از این تابع اضافه بشه تا این مشکل برطرف بشه ، مثل آی پی
ممنون میشم اگر با مثال عنوان کنید :)
-
نقل قول: طریقه استفاده از Session_Regenerate_id
سلام
همیشه یکی از نگرانی های ما برنامه نویسها در مورد سشنها اینه که، آی دی ( شاخص ) سشن لو بره. یعنی اینک هکر سعی میکنه با دزدیدن آی دی سشن یک کاربر، خودشو به جای اون جا بزنه.
تاجای که من میدونم این آی دی های سشن ها، به صورت خودکار تولید میشن، یعنی ما دخالتی نداریم و این آی دی تا پایان اعتبارسشن براش قابل استفاده است.( تایم اوت سشن یا بستن مرورگر ).
این تابع Session_Regenerate_id تا حدودی کمک میکنه از این مشکل دوری کرد. مثلا
<?php
session_start();
$_SESSION['USER_SESS_TOKEN'] = false;
if(check_login()){
session_regenerate_id();
$_SESSION['USER_SESS_TOKEN'] = true;
}
?>
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
siavashsay
ممنون میشم اگر با مثال عنوان کنید :)
<?php
session_start();
$result = mysql_query('select `ip` from table where session_id="'.session_id().'"');
if($result && mysql_num_rows($result)==1){
$ip = mysql_result($result, 0, 0);
if($_SERVER['REMOTE_ADDR'] == $ip){
session_regenerate_id(true);
mysql_query('insert into table("session_id", "ip") values("'.session_id().'", "'.$_SERVER['REMOTE_ADDR'].'")');
}
}
البته این فقط یه مثال هس و خواستم الگوریتم کار رو مشخص کنم
بهتره که این عملیات در خود سشن انجام بشه ، بنابراین سعی کنین یه هندلر برای سشن درست کنید که موارد امنیتی رو بتونید به سادگی بهش اضافه کنید . فکر کنم که توی انجمن هست یه نمونه از یه هندلر .
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
siavashsay
اون که البته ! اما خوب توی یک فروم خارجی بحث سر همین بود که کجا استفاده شه !
2 نفر هم باهم بحثشون شده بود که موقع Logout بهتره و اون یکی میگفت login !
هرکدوم هم دلیل خودشون رو داشتن ! اونی که میگفت logout دلیلش این بود که بعد از لاگ اوت وقتی سشن رو عوض کنی حتی اگرم حک بشه دیگه سشن لاگین قبلی موجود نیست !
خلاصه اینجا بود که گیچ شدم دیگه !:))
از من میپرسی میگم بعد از هر استارت سشن استفاده بشه. حالا هرکجا میخواد باشه. حتی اگر کاربر لاگین نیست!
موقع logout هم بهتره انجام بشه. کار از محکم کاری عیب نمیکنه. چون این قضایای امنیت و انواع حمله ها و سیستم سشن پیچ در پیچ زیاد داره تحلیلش وقت و انرژی مطلبه و آخرش هم چرا روزهء شک دار؟ خب موقع لاگ آوت هم استفاده کنید که شکی توش نباشه. ضرر نداره.
البته قبل از استارت سشن این کدها رو هم همیشه اجرا کرده باشید:
ini_set('session.use_cookies', '1');
ini_set('session.use_only_cookies', '1');
ini_set("session.cookie_httponly", 1);
ini_set("session.use_trans_sid", 0);
این کدها باعث میشن که سشن آیدی فقط در کوکی ذخیره بشه و هیچوقت در لینک و جای دیگه نره که یوقت باعث نشت اتفاقیش بشه.
البته session.cookie_httponly برای امنیت بیشتر کوکی سشن هست در سمت کلاینت که نشه با استفاده از باگهای XSS اون رو سرقت کرد.
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
mtchabok
سلام
جناب eshpilen چرا شما همه چی رو امنیتی می کنین .
این یه تابع خیلی ساده اس برای تغییر آی دی سشن .
آیدی سشن رو واسه چی باید تغییر بدیم خب؟
تاجاییکه میدونم کاربرد اصلیش برای امنیته؛ اگر تنها کاربردش نباشه.
نقل قول:
خوب اگه هکر بخواد سشن آد رو سرقت بکنه ، بازم اینکار رو انجام میده و حتی با استفاده از این تابع هکر دیگه خیالش راحته که با یه بار بدست آوردن سشن آی دی کاربر واقعی دیگه نمیتونه دسترسی داشته باشه چونکه هکر با سشن آی دی سرقتی وارد میشه و با لطف این تابع سشن آی دی جدید برای هکر ارسال میشه و کل امکانات کاربری در اختیار هکر قرار میگیره.
این ضعف شاید در مواردی باشه، اما مجموعا مزایا و نقاط قوتش بیشتره.
معمولا هم هکر نمیخواد کاربر متوجه چیزی بشه و احساس خطر بکنه.
ضمنا کاربر بهرحال میتونه مجددا لاگین کنه.
نقل قول:
بهتر است که موارد دیگه ای برای استفاده از این تابع اضافه بشه تا این مشکل برطرف بشه ، مثل آی پی
اونا موارد جداگانه ای هست که خواستید میتونید استفاده کنید.
ولی منکه به این نتیجه رسیدم که اصلا برای سطح بالای امنیت حرفه ای، سشن بدرد نمیخوره!
در سیستم رجیستر و لاگین خودم هم از سشن برای احراز هویت استفاده نکردم. هیچ کمبود و مشکلی هم نداره. امنیتش هم بالاتره.
-
3 ضمیمه
نقل قول: طریقه استفاده از Session_Regenerate_id
ای داد بی داد! یه حفره امنیتی باحال!!!
در همین رابطه داشتم چندتا نمونه که تو ذهنم بود رو تست میکردم که به چیز جالبی رسیدم. عجب
میشه خیلی راحت از طریق url آی دی هر سشنی رو خودمون تعریف کنیم :قهقهه:
تو این مثال چون لازمه محتویات کوکی حامل آی دی سشن رو بخونیم، سشن هارو تو بانک ذخیره میکنم که راحت بهشون دسترسی داشته باشیم.
خب، کدهای زیرو بریزید تو یه صفحه
require_once('sssh.class.php');
$session=new MySessionHandler('localhost','root','','session_db ');
session_start();
$_SESSION['user'] = 'colors';
حال اون صفحه رو توسط مرورگر باز میکنم.
و نتیجه برای من این شد.(تصویر ضمیمه اول). یعنی آی دی سشن برای من : df1kp0qjqc2ttgij40g5mmvaa0 شد.
خب الان اون سطر از جدول(سشن تولید شده) رو حذف کنید و مرورگرو exit و مجددا run کنید.
الان بدونه اینکه به آدرسی برید مستقیما این آدرس رو فراخوانی کنید:
http://localhost/test1/example.php?PHPSESSID=idad
یعنی قبل از اینکه اون صفحه رو باز کنید حتما اون پارامتر PHPSESSID رو با مقداری دلخواه مثلا idad به urlتون اضافه و بعد go کنید.(تصویر ضمیمه دوم).
و نتیجه برای من این شد.(تصویر ضمیمه سوم). یعنی آی دی سشن برای من : IDAD شد. یعنی همون مقداری که برای پارامتر PHPSESSID در نظر گرفتیم. :لبخند:
خوب هکر میتونه مث آب خوردن یه لینکی چیزی به ما بده که با باز کردنش سشن آی دی ما اونی بشه که دوس داره و ...
برای جلوگیری از این آبروریزی فقط کافیه تابع session_regenerate_id به کار بگیریم. مثلا
require_once('sssh.class.php');
$session=new MySessionHandler('localhost','root','','session_db ');
session_start();
session_regenerate_id();
$_SESSION['user'] = 'colors';
الان شما هرجوری که سایت رو باز کنید ( چه با اون پارامتر PHPSESSID ) یا بدون اون، یک آی دی رندوم برای سشن ایجاد میشه.
ولی بازم با این کار فقط جلوی اینو میگیریم که بچه هکر نتونه با استفاده از URL برای خودش هر غل..ی خواست بکنه. ولی میتونه با بدست آوردن اون آی دی حال کنه. پس اون کدی که تو چند پست بالاتر گذاشتم میتونه راه کار نهایی باشه.
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
colors
ای داد بی داد! یه حفره امنیتی باحال!!!
در همین رابطه داشتم چندتا نمونه که تو ذهنم بود رو تست میکردم که به چیز جالبی رسیدم. عجب
میشه خیلی راحت از طریق url آی دی هر سشنی رو خودمون تعریف کنیم :قهقهه:
خسته نباشید.
تازه کشف کردی؟ :متفکر:
همینه دیگه این چیزا رو نمیدونید بعد خب چطوری میخواید روی امنیتش کار کنید.
نقل قول:
خوب هکر میتونه مث آب خوردن یه لینکی چیزی به ما بده که با باز کردنش سشن آی دی ما اونی بشه که دوس داره و ...
Session fixation به همین میگن دیگه.
نقل قول:
برای جلوگیری از این آبروریزی فقط کافیه تابع session_regenerate_id به کار بگیریم.
ولی بازم با این کار فقط جلوی اینو میگیریم که بچه هکر نتونه با استفاده از URL برای خودش هر غل..ی خواست بکنه. ولی میتونه با بدست آوردن اون آی دی حال کنه. پس اون کدی که تو چند پست بالاتر گذاشتم میتونه راه کار نهایی باشه.
برای امنیت بیشتر، علاوه بر session_regenerate_id اون کدها رو که در بالاتر هم گذاشتم قبل از استارت سشن استفاده کنید:
ini_set('session.use_cookies', '1');ini_set('session.use_only_cookies', '1');ini_set("session.cookie_httponly", 1);ini_set("session.use_trans_sid", 0);
باعث میشن که دیگه از طریق URL نشه سشن آیدی داد.
یه نکتهء دیگر هم اینه که اگر سشن آیدی در URL مجاز باشه اونوقت ممکنه کاربر مثلا لینک صفحه ای رو که داره مشاهده میکنه در یک فروم یا چت بذاره و بدون اینکه بدونه سشن آیدی خودش رو که در اون URL هست در اختیار هکرها بذاره.
-
نقل قول: طریقه استفاده از Session_Regenerate_id
اینه که میگم سشن تنظیم زیاد داره و زیادی پیچ در پیچه!
یکسری قابلیت ها مثل سشن آیدی در URL از قدیم بوده، ولی امروزه کاربردش خیلی کمه، ولی بصورت پیشفرض فعاله و ضعف امنیتی ایجاد میکنه.
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
eshpilen
خسته نباشید.
تازه کشف کردی؟ :متفکر:
همینه دیگه این چیزا رو نمیدونید بعد خب چطوری میخواید روی امنیتش کار کنید.
دمت گرم، خوشم میاد همیشه میزنی تو ذوق آدم. البته من معتقدم تا این تو ذوقی ها نباشه، پیشرفتی در کار نیست.
راستش چون بیشتر رو دیزاین متمرکزم، تاحالا وقت نشده برم سراغ امنیت، مگه اینکه اینجور تاپیکی چیزی بیاد برم دنبالش
-
نقل قول: طریقه استفاده از Session_Regenerate_id
سلام.اقا این تاپیک 14 رو چجوری باید بکار ببریم؟
این کد منه
<?php
ob_start();
session_start();
session_regenerate_id();
if($_SESSION['login']!=true)
{
header("location:../noregister.php");
exit();
}
?>
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
saeed-71
سلام.اقا این تاپیک 14 رو چجوری باید بکار ببریم؟
این کد منه
<?php
ob_start();
session_start();
session_regenerate_id();
if($_SESSION['login']!=true)
{
header("location:../noregister.php");
exit();
}
?>
نیازی به اجراش نیست!
الان کد شما از تابع session_regenerate_id بهره میبره که اون روش پست 14 رو خنثی میکنه.
البته کدهای زیرروهم به اول کدهاتون اضافه کنید.
ini_set('session.use_cookies', '1');ini_set('session.use_only_cookies', '1');ini_set("session.cookie_httponly", 1);ini_set("session.use_trans_sid", 0);
معمولا تو boot میزارنش
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
colors
البته کدهای زیرروهم به اول کدهاتون اضافه کنید.
ini_set('session.use_cookies', '1');ini_set('session.use_only_cookies', '1');ini_set("session.cookie_httponly", 1);ini_set("session.use_trans_sid", 0);
معمولا تو boot میزارنش
مرسی اقا فقط این کد رو قبل سشن استارت اضاف کنم یا بعدش؟؟؟؟؟؟/
-
نقل قول: طریقه استفاده از Session_Regenerate_id
-
نقل قول: طریقه استفاده از Session_Regenerate_id
چرا بعضی دوستان بحث ها رو پیچیده میکنن که بعد خودشون هم نفهمن چی گفتن ....
بعضی مواقع هکرها دست به حملاتی میزنن به نام hijacking که به نوعی سرقت session کاربران سایت ها هستش
برای اینکه کار هکر محترم کمی دشوار بشه بهتره از session_regenerate_id در موارد زیر استفاده بشه نه همه جا
1- موقع ورود کاربر وقتی قراره سشن برای اون ساخته بشه(صفحه لوگین)
2-موقع خروج کاربر (صفحه لاگ اوت)
3-برای ادمین در تمامی قسمت هایی که سشن تغییر میکنه.
لازم هست بعد از استارت کردن سشن از این دستور استفاده بشه:
session_start();
session_regenerate_id(true);
این true که توی پرانتز به عنوان ورودی تابع داده شده به این معنی هست که سشن ساخته شده قبی از بین بره و سشن جدید جایگزین اون بشه
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
نوشته شده توسط
mbf5923
چرا بعضی دوستان بحث ها رو پیچیده میکنن که بعد خودشون هم نفهمن چی گفتن ....
بعضی مواقع هکرها دست به حملاتی میزنن به نام hijacking که به نوعی سرقت session کاربران سایت ها هستش
برای اینکه کار هکر محترم کمی دشوار بشه بهتره از session_regenerate_id در موارد زیر استفاده بشه نه همه جا
1- موقع ورود کاربر وقتی قراره سشن برای اون ساخته بشه(صفحه لوگین)
2-موقع خروج کاربر (صفحه لاگ اوت)
3-برای ادمین در تمامی قسمت هایی که سشن تغییر میکنه.
لازم هست بعد از استارت کردن سشن از این دستور استفاده بشه:
session_start();
session_regenerate_id(true);
این true که توی پرانتز به عنوان ورودی تابع داده شده به این معنی هست که سشن ساخته شده قبی از بین بره و سشن جدید جایگزین اون بشه
این true رو نباید جایی تعریف کرد؟تعریف شدست؟
یا اینکه شما طبق کد من true رو گذاشتید؟
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نه دوست عزیز این ورودی تابع هستش نه طبق کد شماست و نه تعریف نیاز داره
اگه False بدین تابع با حفظ سشن آیدی قبل یک سشن آیدی جدید به کاربر اختصاص میده که یعنی کشک اما وقتی True میدیم یعنی قبلی رو ازبین ببر یه سشن آیدی جدید به کاربر بده
-
نقل قول: طریقه استفاده از Session_Regenerate_id
نقل قول:
اگه False بدین تابع با حفظ سشن آیدی قبل یک سشن آیدی جدید به کاربر اختصاص میده که یعنی کشک اما وقتی True میدیم یعنی قبلی رو ازبین ببر یه سشن آیدی جدید به کاربر بده
دقیقا درست فرمودید.
می خواستم همی رو بگم.
من این کار رو در دو مرورگر تست کردم و دیدم راحت بدون استفاده از true هک میشه !