• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل : بیرون افتادن یوزر از محیط کاربری پس از استفاده از session_regenerate_id
#1
Exclamation 
دوستان برنامه نویسی سایت من تموم شده و چند روزه دارم روی امنیتش کار می کنم ...

برای ورود کاربر و استفاده از سشن هم خوندم از session_regenerate_id(true); استفاده کنم امنیت بهتر میشه ...

اما یک مشکل : زمانی که session_regenerate_id(true); رو حذف کنم سایت به درستی کار می کنه . اما زمانی که session_regenerate_id(true); رو اضافه می کنم ، با لود شدن صفحه ، آی.دی سشن عوض میشه . اما کاربر هم از محیط کاربری میفته بیرون . انگار دیگه سشن رو نمیشناسه که اطلاعات رو ازش بگیره ...

مدهای من رو ببینید : ایرادش کجاست ؟؟؟

این کد صفحه لاگین منه که اطلاعات مرورگر و ای.پی و شماره id کاربر رو در سشن میریزه :

کد پی‌اچ‌پی:
$query "select * from table_users where user_name=$input_uasername";
    
$result mysql_db_query$dbname$query$RSconn );
    
$num mysql_num_rows$result );
    
$RS mysql_fetch_array$result );
    
$user_id $RS['id'];
    
$password $RS['pass'];
    
    if ( 
$num == && md5$inputpass ) == $password )
    {
        
session_start( );
        
$_SESSION['USER_INFO']= md5security .$_SERVER['HTTP_USER_AGENT']. salam .$_SERVER['REMOTE_ADDR']);  
        
$_SESSION['siteuserid'] = $user_id;
        
header("Location: user_panel.php");
    }
    else
    {
        
header("Location: login_again.php");
    } 

این هم کد چک کردن اینکه کاربر وارد شده یا نه :

کد پی‌اچ‌پی:
session_start( );
session_regenerate_id(true);  
$siteuserid $_SESSION['siteuserid'];

function 
page_protect() 
{
    if ((isset(
$_SESSION['siteuserid'])) && (isset($_SESSION['USER_INFO']) && $_SESSION['USER_INFO'] == md5(“security”.$_SERVER['HTTP_USER_AGENT'].”salam”.$_SERVER['REMOTE_ADDR'])))
        {
        }
     else 
        {
        
header("location: page,login");
        exit();
        }


این کد در صفحه ای قرار داره که در بالای همه صفحات include شده و در هر صفحه ای که بخوام دسترسی فقط مختص اعضای وارد شده باشه ، از کد :
page_protect();
استفاده می کنم ...

ممنون میشم راهنمایی کنین ... خیلی کد ها رو دستکاری کردم . اما مشکلم حل نشد ...
  پاسخ
تشکر شده توسط :
#2
با دستکاری هایی در کدهام و ... موفق شدم مشکل رو تا حدودی رفع کنم ...
من در صفحه ای که لود میشه از session_regenerate_id(true); استفاده می کنم ... این کار باعث میشه سشن قبلی از بین بره و یک سشن جدید با نام جدید ایجاد بشه . در حالی که کلیه محتوای سشن قبلی رو در خودش داره !!! و همچنین کوکی متناظر با آن PHPSESSID هم بروز میشه و نام سشن جدید رو در خودش ذخیره می کنه ...

الان همه چیز کار می کنه ... فقط تنها مشکلی که هست اینه : اگه با فاصله چند ثانیه صفحات رو ریفرش کنم یا به صفحات دیگه برم مشکلی پیش نمیاد . امااگه بدون فاصله و سریع ریفرش کنم یا روی لینک های سایت کلیک کنم و به صفحات دیگه برم ، سشن جدید نمی تونه مقادیر قبلی رو ذخیره کته ... پاک گیج شدم ... بعضی ها می گن برای امنیت سشن حتما باید اینکار رو انجام بدم . اما از طرفی مشکل دارم ...

در واقع همونطوری که در مقالات خوندم ، با تغییر مداوم نام سشن ، راه رو برای session hijacking و هک از این روش میبنده ...

اگه جایی از گفته هام اشتباهه لطفا اساتید اصلاح کنند ...
  پاسخ
تشکر شده توسط :
#3
سلام دوست عزیز
http://ir.php.net/session_regenerate_id
رو کامل مطالعه کنید. حتی قسمتی که کاربرا رو. حتما مشکلتون حل میشه
من خودم چون زیاد با session پی اچ پی کار نمی کنم تا به حال به این مورد بر نخوردم
  پاسخ
تشکر شده توسط : troy3 oia
#4
(۱۳۸۸ مهر ۱۹, ۱۱:۳۵ ق.ظ)admin نوشته: سلام دوست عزیز
http://ir.php.net/session_regenerate_id
رو کامل مطالعه کنید. حتی قسمتی که کاربرا رو. حتما مشکلتون حل میشه
من خودم چون زیاد با session پی اچ پی کار نمی کنم تا به حال به این مورد بر نخوردم

ممنون

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

به نظر شما برای جلوگیری از session fixation , session hijacking از چه روش جایگزینی استفاده کنم که امنیت تامین بشه ؟؟؟

فکر کنم باید _regenerate_id رو بیخیال بشم ...
  پاسخ
تشکر شده توسط :
#5
من از این روش استفاده می کنم

کد پی‌اچ‌پی:
if (isset($_SESSION['check_user_session']))
{
    if (
$_SESSION['check_user_session'] != md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']))
    {
        exit;
    }
}
else
{
    
$_SESSION['check_user_session'] = md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']);


به نظر شما خوب نیست؟
  پاسخ
تشکر شده توسط : troy3 faghani amir.s
#6
(۱۳۸۸ مهر ۱۹, ۰۱:۲۲ ب.ظ)admin نوشته: من از این روش استفاده می کنم

کد پی‌اچ‌پی:
if (isset($_SESSION['check_user_session']))
{
    if (
$_SESSION['check_user_session'] != md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']))
    {
        exit;
    }
}
else
{
    
$_SESSION['check_user_session'] = md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']);


به نظر شما خوب نیست؟

به نظر من هم این روش خوبه . من خودم این روش هم استفاده می کنم . می خواستم با تلفیق این 2 روش امنیت رو بالاتر ببرم ...
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان