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

موضوع: جلوگیری از اسپم با ساخت و بررسی captcha

  1. #1
    کاربر سایت
    تاریخ عضویت
    2012/06/15
    محل سکونت
    تهران
    نوشته ها
    4,088

    پیش فرض جلوگیری از اسپم با ساخت و بررسی captcha

    در اکثر سایتها در فرم های تماس با ما ، اگر مشاهده کرده باشید کد امنیتی تصویری وجود دارد که بصورت تصادفی تولید می شوند و کار رباتها را در پیدا کردن متن تصادفی تولید شده در تصویر سخت تر می کنند، معمولا از این قابلیت برای تشخیص انسان بودن کاربر سایت استفاده می شود زیرا فقط انسان میتواند کاراکترهای داخل تصویر را براحتی تشخیص دهد و در مکان در نظر گرفته شده برای کد امنیتی وارد کند.
    چگونه CAPTCHA کار می کند؟
    یک کپچا یا CAPTCHA یک رشته تصادفی ایجاد می کند و ان را در یک عکس می نویسد، سپس رشته را در یک session یا cookie یا روش های دیگر ذخیره می کند. رشته تصادفی وقتی فرم و یا عملیات انجام شد چک می شود.
    مراحل انجام کار در زیر آمده است:
    1- رشته تصادفی ایجاد می شود
    2- رشته داخل عکس نوشته می شود
    3- رشته داخل session,cookie,database ذخیره می شود.
    4- عکس به کاربر نمایش داده می شود
    5- کاربر کد نمایش داده شده در عکس را وارد می کند.
    6- کد وارد شده توسط کاربر با کد ذخیره شده مقایسه می شود
    7- اگر انها با هم تطبیق داشتند کاری انجام می شود فرضا لاگین به پروفایل کاربری و ...
    ایجاد کردن رشته تصادفی
    برای انجام این کار ما از توابع PHP، microtime() و mktime() برای تولید کردن عدد استفاده خواهیم کرد. این عدد سپس توسط تابع md5() به صورت رمز در می آید. طول رشته به رمز درآمده 32 کاراکتر است، ما با استفاده از تابع substr() طول رشته را به 5 کاراکتر می رسانیم. این رشته تصادفی ما است.

    //Start the session so we can store what the code actually is.
    Session_start();
    //Now lets use md5 to generate a totally random string
    $md5=md5(microtime()*mktime());
    //We don’t need a 32 character long string so we trim it down to 5
    $string=substr($md5,0,5);
    ?>
    بعدا ما این رشته را در عکس می نویسیم و به کاربر نشان می دهیم.
    نوشتن متن درون عکس
    حال که ما رشته تصادفی را برای نوشتن داریم، ما باید ان را درون عکس بنویسیم و ان را به کاربر نشان دهیم. این کار به آسانی توسط کتابخانه GD انجام می شود.

    $captcha=imagecreatefrompng(“./ariacoders_captcha.png”);
    /*
    Lets set the colours, the colour $line is used to generate lines.
    Using a blue misy colours.The colour codes are in RGB.
    */
    $black=imagecolorallocate($captcha,0,0,0);
    $line=imagecolorallocate($captcha,250,239,241);
    /* Lets add some lines
    In (static lines) to attempt to make the bots life a little harder
    */
    Imageline($captcha,0,0,40,25,$line);
    Imageline($captcha,40,0,20,51,$line);
    ?>
    همانطور که شما در کد بالا میبینید، ما بجای ساختن عکس که خودش می تواند یک پیچیدگی کوچک برای این اموزش باشد، عکس را از فایل ariacoders_captcha.png بارگزاری کرده ایم. وقتی که ما از رنگ در GD استفاده می کنیم، ما باید رنگ را به یک متغیر اختصاص بدهیم، ما با استفاده از تابع imagecolorallocate() این کار را انجام می دهیم. ما از رنگهایی که درون متغیر ذخیره شده است، برای کشیدن خطهایی درون عکس استفاده می کنیم. این، کار شکستن captcha را توسط رباتها را قدری سخت تر می کند. سرانجام ما باید رشته را درون عکس بنویسیم که به آسانی توسط تابع imagestring() انجام می شود. تنها چیزی که باقی می ماند این است که عکس را به خروجی ببریم.
    برای اینکار توسط تابع header()، تنظیمات content type صفحه را به image/png تغییر می دهیم و عکس را توسط تابع imagepng() به مرورگر ارسال می کنیم. رشته به رمز دراورده شده درون آرایه Session ذخیره می شود.
    Imagestring($captcha,5,20,10,$string,$black);
    $_SESSION[‘key’]=md5($string);
    //Output the image
    Header(“Content-type:image/png”);
    Imagepng($captcha);
    ?>
    چک کردن اینکه آیا کاربر کد را درست وارد کرده است
    برای چک کردن درستی کد وارد شده توسط کاربر اول باید به کاربر اجازه این کار را بدهیم. شما میتوانید برای انجام این کار از ورودی متنی ساده برای وارد کردن کد استفاده کنید، یک ورودی متن ساده باید بخوبی برای این منظور کار کند.
    سپس شما باید عکس را با استفاده از تگ به کاربر نشان دهید. ساختن یک فرم شبیه این واقعا یک کار ساده است. حال فرض می کنیم که اطلاعات این فرم ارسال شده است، ما نیاز داریم که کد وارد شده توسط کاربر را با عکس مقایسه کنیم. این کل سیستم CAPTCHA یا کپچا است . شما میتوانید این کارها را در هر فایل PHP استفاده کنید.
    برای چک کردن از کد زیر استفاده خواهیم کرد.

    Session_start();
    If((md5($_POST[‘verify’])!=$_SESSION[‘key’])||($_SESSION[‘key’]==”” || (!isset($_SESSION[‘key’]))
    {
    Die(“Error: You must enter the code correctly”);
    }
    else
    {
    echo ‘You entered the code correctly’;
    }
    همانطور که شما میبینید برای مقایسه کردن کد وارد شده توسط کاربر از دستور شرطی if استفاده می کنیم و بخش else در واقع خلاف شرط می باشد.
    توصیه های مهم:
    CAPTCHA تولیدی در این آموزش امن ترین نمی باشد ولی اگر احساس خطر زیادی می کنید میتوانید روشهای زیر را نیز بکار گیرید.
    • از فونتهای TTF استفاده کنید.
    • خطها را به طور تصادفی جا به جا کنید
    • موقعیت و محل متن درون عکس بصورت تصادفی باشد
    • چرخاندن متن بطور تصادفی
    • استفاده از لغات به جای آن رشته
    ویرایش توسط !MAHSA! : 2013/09/18 در ساعت 21:45

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

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