نمایش نتایج: از شماره 1 تا 1 , از مجموع 1

موضوع: امنیت در فرم ورود (session و cookie)

  1. #1
    عضو انجمن yastheme آواتار ها
    تاریخ عضویت
    Oct 2010
    محل سکونت
    Izadshahr
    نوشته ها
    482
    تشکر تشکر کرده 
    434
    تشکر تشکر شده 
    1,565
    تشکر شده در
    691 پست

    پیش فرض امنیت در فرم ورود (session و cookie)

    سلام دوستان,

    یکی از مسائل مهم در php تامین امنیت اونه مخصوصا در صفحاتی که دارای مجوز سطح دسترسی می باشد! امروز به مسئله Login و امنیت اون می پردازیم!
    شما توی یه فرم ورود نام کاربریو کلمه عبورو چک می کنید و اگه درست بود به اون Session میدید, کاری به مرحله چک کردن نداریم و فرض می کنیم که کلمه عبور درست بوده و حالا باید به یه کاربر تایید شده Session بدیم!
    کد PHP:
    <?php
    ……
    if(true){
    $time=time();
    $hash1=md5($time);

     
    $ip=$_SERVER["REMOTE_ADDR"] ;
    $hash2=md5($hash1.$ip);
     
    setcookie(‘secret’,$hash1time()+3600);
     
    $_SESSION['user'] = $userid;
    $_SESSION['secret'] = $hash2;
     
    header(‘Locationadmin.php’);
    }
    خوب تو مرحله اول با استفاده از تابع time یه مقداری (زمان فعلی) رومیسازیم و اونو تبدیل به هش md5 می کنیم!اسمش هم گذاشتیم hash1 که مقدارش تا آخر و زمان خروج کاربر ثابت می مونه,!
    با استفاده از $ip=$_SERVER["REMOTE_ADDR"] ; یه متغیر تعریف می کنیم که حاوی IP کاربر هست! و حالا دومین هش خودمونو درست می کنیم به اسم hash2 که شامل هش مقدار قبلی(hash1) و IP کاربره!
    با استفاده از setcookie(‘secret’,$hash1, time()+3600); یک کوکی در مرورگر کاربر می سازیم و مقدار hash1 را در نام کاربری secretذخیره میکنیم !
    $_SESSION['user'] = $userid; یک سشن دلخواه برای شناسایی کاربر است, معمولا نام کاربری یا آی دی کاربر در این سشن تعریف می شود .
    و اما $_SESSION['secret'] = $hash2; مقدار hash2 را در یک session به نام secret قرار دادیم, و در مرحله آخرهم انتقال به صفحه مدیر, حالا باید تو صفحه مدیریت ورودی هامونو چک کنیم:

    admin.php
    کد PHP:
    ……..

     if(!isset(
    $_SESSION['secret']))
    {
    header(“locationlogout.php”);
    exit();
    }else{
    $hash1=$_COOKIE["secret"];
    $ip=$_SERVER["REMOTE_ADDR"] ;
    $hash2=$_SESSION['secret'];
     
    $hash2Check=md5($hash1.$ip);
     if(
    $hash2Check != $hash2)
    {
    header(“locationlogout.php”);
    exit();
    }

     
    …… 
    خوب تو مرحله اول چک می کنیم اصلا session داریم یا نه! ممکنه یکی همینطوری آدرس صفحه رو وارد کرده باشه , if(!isset($_SESSION['secret']))
    اگه شرط برقرار نبود یعنی session secret وجود نداشت کاربر با احترام به صفحه دیگه منتقل میشه
    ولی اگه session وجود داشت پس حتما یکی Login کرده ,من خودم قبلنا تا همین جا اکتفا می کردم و کاربر به صورت کامل وارد میشد(البته تو صفحه قبلش هم IP و .. نمیگرفتم) ملاک من فقط وجود session بود و حتی مقدارش هم مهم نبود,البته session ها تا حدودی امن هم هستند چون روی هاست ساخته می شوند و مثل کوکی بر روی سیستم کاربر نیستند که قابل تغییر باشند!
    اما اگه یکی به هاست شما دسترسی داشته باشه چی؟ تو هاست های اشتراکی که سطح امنیت پایین تره معمولا این روش زیاد امن نبود پس به ادامه دادن مرحله چک کردن می پردازیم!
    حالا اگه Session وجود داشت فایل کوکی هم فراخوانی می کنیم و مقدارو میگیریم:
    کد PHP:
        $hash1=$_COOKIE["secret"]; 
    حالا hash1برابر مقدار کوکی هست,
    خوب طبق کد های بالا تو صفحه قبل hash2 ما برابر بود با hash1+IP , پس دوباره از کاربر ip میگیریم و با hash1 دوباره هش می کنیم و تو یه متغیر به اسم hash2Check ثبت می کنیم :
    کد PHP:
    $ip=$_SERVER["REMOTE_ADDR"] ;
    $hash2Check=md5($hash1.$ip); 
    خوب اگه اطلاعات ما درست باشه وکسی قصد زرنگ بازی در آوردن نداشته باشه که فکر کنه به راحتی می تونه با یه جعل ساده کوکی یا Session وارد بشه , متغیر hash2Check باید برابر باشه با hash2 !
    تو این شرایط هکر اگه به هاست شما هم دسترسی داشته باشه باز به کوکی دسترسی نداره و یا بلعکس ! حتی اگه یه درصد هم احتمال بدیم هم سشن و هم کوکی رو داره با IP می خواد چی کار کنه!؟ IP شما توی اطلاعات هش کد شده واگه IP شما نباشه هیچ وقت hash2Check برابر با hash2 نمیشه! خلاصه کوچکترین تغییر یعنی عدم برابری این دو تا پس در آخر این دوتا رو چک می کنیم!
    کد PHP:
    if($hash2Check != $hash2
    و اگر برابر نبود دوباره کاربر با احترام به صفحه خروج هدایت می کنیم ,
    با تشکر

    منبع: امنیت در فرم ورود (session و cookie) | PHP تیــــــک

    سنترال هاستینگ - اولین سرویس دهنده DDoS Protected ایرانی!
    █ شرکت ایمن میزبان راهبر کاسپین (شماره ثبت : 1799 شناسه ملی: 14006354907 )


  2. تعداد تشکر ها از yastheme به دلیل پست مفید


  3. # ADS




     

اطلاعات موضوع

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

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. رفع Use cookie-free domains در جی متریک
    توسط tabtak در انجمن سوالات و مشکلات
    پاسخ ها: 0
    آخرين نوشته: March 1st, 2018, 00:18
  2. درخواست کانفیگر مسلط به HTTP Header و cookie ها
    توسط csmaster در انجمن درخواست خدمات کانفیگ سرور و وب سایت
    پاسخ ها: 0
    آخرين نوشته: July 25th, 2014, 00:17
  3. فــــوری !! مشکل در session
    توسط sir-mammad در انجمن سوالات و مشکلات
    پاسخ ها: 2
    آخرين نوشته: April 18th, 2014, 12:30
  4. مشکل session در سایت
    توسط Shc در انجمن سوالات و مشکلات
    پاسخ ها: 6
    آخرين نوشته: March 3rd, 2013, 01:33
  5. مشکل در session ها در vps
    توسط reimei در انجمن سوالات و مشکلات
    پاسخ ها: 9
    آخرين نوشته: July 14th, 2011, 20:05

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •