/
  • بررسی وضعیت لاگین بودن کاربر به روش امن

  • صفحه‌ها (2):
  • ارسال پاسخ   امتیاز موضوع:
    • 0 رأی - میانگین امیتازات: 0
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی بررسی وضعیت لاگین بودن کاربر به روش امن
    نویسنده پیام
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,024
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2718 تشکر در 1692 ارسال )
    ارسال: #1
    بررسی وضعیت لاگین بودن کاربر به روش امن
    چک کردن کاربر لاگین شده

    سلام
    نظرتون در مورد این چیه ؟
    اول از همه بگم سسشن توی دیتابیس ذخیره میشه و کلیدش هم همون PHPSESID هست .

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

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

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

    نظرتون چیه ؟

    کد PHP:
    <?php


    class UserIdentity extends CUserIdentity
    {

        public function 
    authenticate()
        {
            
    $pass sha1($this->password) ;
            
    $command Yii::app()->db->createCommand("select * from user where `username`=:username and `password`=:pass ");
            
    $command->bindParam(':username',$this->username,2);
            
    $command->bindParam(':pass',$pass,2);
            
    $row $command->queryRow();
            
    //print_r($row);
                    
            
    if(empty($row))
                return 
    false;
            else
            {
                
    Yii::app()->session['user_id'] = $row['id'];
                
    Yii::app()->session['ip'] = $_SERVER['REMOTE_ADDR'];
                
    Yii::app()->session['agent'] = $_SERVER['HTTP_USER_AGENT'];
                return 
    self::generate(true);
            }
        }
        
        public static function 
    is_admin()
        {
            
    $id Yii::app()->session['user_id'];
            
    $ip Yii::app()->session['ip'];
            
    $agent Yii::app()->session['agent'];
            
            if(empty(
    $id))
                return 
    false;
            
            
    /*if($ip != $_SERVER['REMOTE_ADDR'])
                return false;*/
            
            
    if($agent != $_SERVER['HTTP_USER_AGENT'])
                return 
    false;
            
            return 
    self::generate();
        }
        
        public static function 
    logout()
        {
            
    Yii::app()->session->clear() ;
            
    Yii::app()->request->cookies->remove('random',array('httpOnly'=>true));        
        }
        
        
        private static function 
    generate($first_login false)
        {
            
    $rand self::random();
            if(
    $first_login)
            {
                
    Yii::app()->session['random'] = $rand;
                
    $options=array('httpOnly'=>true);
                
    Yii::app()->request->cookies['random']=new CHttpCookie('random',$rand,$options);
                return 
    true;
            }
            else
            {
                
    $rand_cookie Yii::app()->request->cookies['random'] ;
                if( empty(
    $rand_cookie) or Yii::app()->session['random'] != $rand_cookie->value )
                    return 
    false;
                
                
    $options=array('httpOnly'=>true);
                
    Yii::app()->request->cookies->remove('random',$options);
                
    Yii::app()->session['random'] = $rand;
                
    Yii::app()->request->cookies['random']=new CHttpCookie('random',$rand,$options);
                return 
    true;
            }
        }
        
        private static function 
    random()
        {
            
    $str time().$_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SERVER['SERVER_SOFTWARE'].mt_rand(100,999);
            
    $str = (string) $str;
            return 
    sha1($str);
        }

    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۱ آبان ۳۰ ۰۶:۵۵ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,024
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2718 تشکر در 1692 ارسال )
    ارسال: #2
    RE: بررسی وضعیت لاگین بودن کاربر به روش امن
    خدا وکیلی خیلی نامردید .
    من دیگه ماه به ماه اینجا نمیام Dodgy
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۱ آبان ۳۰ ۱۱:۳۷ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : undefined ali786
    undefined غایب
    احسان
    *******

    ارسال‌ها: 2,087
    تاریخ عضویت: ۱۳۸۸ مهر ۲۹
    اعتبار: 76
    تشکرها : 2005
    ( 2071 تشکر در 1219 ارسال )
    ارسال: #3
    RE: بررسی وضعیت لاگین بودن کاربر به روش امن
    نقل قول: خدا وکیلی خیلی نامردید .
    من دیگه ماه به ماه اینجا نمیام

    چیه مگه؟!
    80% مشکلاتی که من میزارم تو انجمن جواب داده نمیشه Sad
    تا حالا گله کردم؟! یاد بگیر یه خورده، نصفه تو هستم Tongue

    نقل قول: اول از همه بگم سسشن توی دیتابیس ذخیره میشه و کلیدش هم همون PHPSESID هست .

    چرا دیتابیس دقیقا؟
    خب تو همون سشن بذار.

    راه های بهتری برای مقابله با session hijaking و session fixation هم هست.

    در کل با این روشت مشکل دارم، یه نگا به کلاس های لاگین استاندارد بنداز.

    پ.ن: خعلی Heart دارم، نبینم ناراحت باشیا Blush
    __________________________________________________________________________
    هر چیزی که در جستن آنی آنی...
    ۱۳۹۱ آبان ۳۰ ۱۱:۵۴ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : Reza
    webnevesht آفلاین
    محمدرضا سلطانی
    ***

    ارسال‌ها: 972
    تاریخ عضویت: ۱۳۹۰ آذر ۲۵
    اعتبار: 22
    تشکرها : 384
    ( 702 تشکر در 427 ارسال )
    ارسال: #4
    RE: بررسی وضعیت لاگین بودن کاربر به روش امن
    رضا زدی توی خط Yii?Blush
    __________________________________________________________________________
    بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
    ۱۳۹۱ آذر ۱ ۱۲:۴۰ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    amenocy آفلاین
    امین عباسی
    ***

    ارسال‌ها: 173
    تاریخ عضویت: ۱۳۸۹ دي ۱۳
    اعتبار: 4
    تشکرها : 61
    ( 102 تشکر در 76 ارسال )
    ارسال: #5
    RE: بررسی وضعیت لاگین بودن کاربر به روش امن
    البته فکر کنم الام مشکل اینه که شما از sha1 استفاده کردید .
    __________________________________________________________________________
    Idea

    Apkmafia Android apk download blog
    ۱۳۹۱ آذر ۱ ۰۱:۰۹ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,024
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2718 تشکر در 1692 ارسال )
    ارسال: #6
    RE: بررسی وضعیت لاگین بودن کاربر به روش امن
    @ احسان :
    Angry
    خب سسشن توی دیتابیس خوبه دیگه نمیفهمم چرا میگی چرا دیتابیس Dodgy
    راههای بهتر منظورت چیه ؟
    الان این راهی که من پیاده کردم ارتباط دایمی برنامه با کاربر هست از طریق کوکی ، هر جا شبه ای باشه لاگ اوت میده میره پی کارش .
    من قبل از اینکه اینو بسازم چند جا جستجو کردم session hijacing که با قرار دادن سسشن توی دیتابیس منتفی میشه .
    این روش هم برای جلوگیری از session fixation هستSleepy

    یه دوتا از اون راههای بهتر رو بگو ، خداوکیلی مغزم ترکیدRolleyes

    @ محمد :
    چیکار کنیم دیگه ، خدا باعث و بانیش رو ....
    داشتم مثل بچه آدم کیک کار میکردم استارتش رو زده بودم فجیع ! اما زدیم به خط YiiAngel

    @ امین :
    مشکل چی ؟؟؟
    الان داره مثل گل و بلبل کار میکنه ، منطقش رو میگم به نظرت گیر و گور و سوتی نداره ؟!
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    (آخرین ویرایش در این ارسال: ۱۳۹۱ آذر ۱ ۰۱:۱۸ صبح، توسط Reza.)
    ۱۳۹۱ آذر ۱ ۰۱:۱۶ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    webnevesht آفلاین
    محمدرضا سلطانی
    ***

    ارسال‌ها: 972
    تاریخ عضویت: ۱۳۹۰ آذر ۲۵
    اعتبار: 22
    تشکرها : 384
    ( 702 تشکر در 427 ارسال )
    ارسال: #7
    RE: بررسی وضعیت لاگین بودن کاربر به روش امن
    اینجا جاش نیست اما کیک رو ترجیح میدی یا yii رو؟
    __________________________________________________________________________
    بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
    ۱۳۹۱ آذر ۱ ۱۱:۵۱ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    amenocy آفلاین
    امین عباسی
    ***

    ارسال‌ها: 173
    تاریخ عضویت: ۱۳۸۹ دي ۱۳
    اعتبار: 4
    تشکرها : 61
    ( 102 تشکر در 76 ارسال )
    ارسال: #8
    RE: بررسی وضعیت لاگین بودن کاربر به روش امن
    نه منطقش مشکلی نداره برای از دست دادن سیشن . البته یه مساله ای هست . ses ای که از سرور دزدیده شده خب 100% به اون یکی رندوم کد هم دسترسی خواهد داشت + اگه از کاربر دزدیده شده باشه بازم به اون رندوم کد این بار از طرف کاربر دسترسی خواهد داشت . پس فقط میمونه یوزر اجینت که اونم نیازی به دیتابیس نبود Big Grin
    __________________________________________________________________________
    Idea

    Apkmafia Android apk download blog
    ۱۳۹۱ آذر ۱ ۱۲:۵۳ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,024
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2718 تشکر در 1692 ارسال )
    ارسال: #9
    RE: بررسی وضعیت لاگین بودن کاربر به روش امن
    @ محمد رضا :
    Yii
    @ امین :
    یا تو نمیفهمی من چی میگم یا من نمیفهمم تو چی میگیAngel
    اون رشته رندم در هر در خواست صفحه تغییر میکنه یعنی کاربری که توی سایت لاگین کرد 10 تا صفحه رو باز کرد 10 بار عوض میشه .
    کسی که بخواد SESSID رو بدزده خب وقت زیادی داره اما اون رشته رندم وقتی هی تغییر میکنه چی ؟

    @ احسان :
    کماکان منتظریم ، یه چیزی بگم الان استاند بای موندم دیگه Dodgy
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۱ آذر ۱ ۰۴:۴۱ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    amenocy آفلاین
    امین عباسی
    ***

    ارسال‌ها: 173
    تاریخ عضویت: ۱۳۸۹ دي ۱۳
    اعتبار: 4
    تشکرها : 61
    ( 102 تشکر در 76 ارسال )
    ارسال: #10
    RE: بررسی وضعیت لاگین بودن کاربر به روش امن
    خب فرض کن آخرین ID رو داشته باشم ؟! اون موقع برای من هکر هم تغییر خواهد کرد دیگه ! منظورم اینه که تو نمیتونی بین هکر و کاربر اصلی توی اون ID تمایزی قائل بشی ؟ میشه ؟ اگه من قبل از یوزر درخواست بعدی رو بدم اون موقع کاربر اصلیه که معتبر نیست
    __________________________________________________________________________
    Idea

    Apkmafia Android apk download blog
    (آخرین ویرایش در این ارسال: ۱۳۹۱ آذر ۱ ۰۶:۵۹ عصر، توسط amenocy.)
    ۱۳۹۱ آذر ۱ ۰۶:۵۵ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : Reza
    « قدیمی تر | تازه‌ تر »

  • صفحه‌ها (2):
  • ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS