loading...

ابزارها قالب

افزایش امنیت فرم های php با استفاده از ایجاد تصاویر تصادفی امنیتی (captcha)

تبلیغات
تبلیغات ارزان و پربازدهتبلیغات ارزان و پربازده
آخرین ارسال های انجمن
حمیدرضا بازدید : 4078 دوشنبه 01 تير 1394 نظرات (3)

فکر کنم بدانید که تصاویر تصادفی امنیتی (captcha) چه کاربردی دارد و چیست! اما با این حال توضیح می دهم. در سایت هایی که در آن ها فرم وارد کردن اطلاعات وجود دارد ، یک سری موارد باید رعایت شود. این موارد به امنیت این فرم ها و امنیت سایت کمک می کند و از حمله ی نفوذی هکر ها جلوگیری می کند. یکی از روش های معمول ایجاد این امنیت ، تصاویر امنیتی است که کاربر در هر بار استفاده از یک فرم باید حروف یا اعداد داخل یک تصویر (که به صورت تصادفی نمایش داده می شود) را همراه با اطلاعات فرم ارسالی وارد کند. بعد از این که ، مقدار وارد شده توسط کاربر به سمت سرور ارسال شد ، در آن جا این مقدار بررسی می شود و اگر درست بود ، ادامه ی عملیات انجام می شود.

یک نمونه تصویر امنیتی:تصویر امنیتی captcha

برای این که بهتر متوجه شوید می توانید صفحه را یک بار رفرش کنید. خواهید دید که تصویر بالا تغییر کرده است. اما چرا این تصاویر باعث می شوند که امنیت فرم ها بالا برود؟

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

نکته: اگر می خواهید این مطلب را متوجه شوید باید با php آشنایی داشته باشید. برای آشنایی با این زبان برنامه نویسی اینجا کلیک کنید.

آموزش ایجاد تصویر تصادفی کپچا با استفاده از php

برای شروع ابتدا کد های زیر را در فایلی به نام captcha.php کپی کنید و آن ها را اجرا کنید:

<<<code>>>

<?php

    session_start(); // شروع یک نشست

    $number = rand(100,999999); // ایجاد یک عدد تصادفی

    $_SESSION['captcha'] = $number; // ذخیره عدد در نشست

    $img = imagecreate(150,30); // ایجاد یک تصویر 30×150

    imagecolorallocate($img,255,255,255); // ایجاد رنگ پس زمینه

    $color=imagecolorallocate($img,0,0,0); // ساخت یک رنگ

    imagettftext($img,30,0,0,26,$color,"bmehr.ttf",$number); // وارد کردن عدد تصادفی در تصویر

    header("content-type: image/png"); // تعیین نوع فایل خروجی

    imagepng($img); // نمایش تصویر

?>

<<</code>>>

توجه کنید که اگر هم اکنون این کد را اجرا کنید ، خطا در خط 8 دریافت خواهید کرد. این خطا مربوط به این موضوع است که فایل فونت bmehr.ttf یافت نمی شود. برای رفع این مشکل شما می توانید این فونت را از اینجا دانلود کنید. بعد از دانلود آن را درون پوشه ی فایل بالا قرار دهید تا مشکل رفع شود.

قسمت قرمز رنگ: در این قسمت ما نشست (session) را شروع می کنیم. نشست در php مربوط به یک سری اطلاعات است که به صورت کد شده در مرورگر کاربر ذخیره می شود و شما با استفاده از این قسمت می توانید یک نشست جدید را شروع کنید.

قسمت آبی رنگ: این قسمت مشخص کننده ی مقادیر حداقلی و حداکثری برای عدد تصادفی است. تابع rand یک عدد تصادفی می سازد.

در خط بعدی من مقدار عدد تصادفی را در نشست ذخیره کرده ام. برای ذخیره ی اطلاعات در Session باید اینطور عمل کرد:

<<<code>>>

$_SESSION['name'] = value ;

<<</code>>>

قسمت های قرمز رنگ به ترتیب مربوط به نام دلخواه و مقدار دلخواه هستند.

قسمت بنفش رنگ: اندازه ی طول و عرض تصویر.

قسمت سبز رنگ: این قسمت که در تابع imagecolorallocate قرار دارد ، به ترتیب نشان دهنده ی مقادیر رنگ های قرمز ، سبز و آبی است. مقدار هر یک از این رنگ ها می تواند بین 0 تا 255 باشد. در خط بعدی با استفاده از همین تابع من یک رنگ برای متن ایجاد کرده ام.

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

<<<code>>>

imagettftext( image , size , angle , x , y , color , font-file , text );

<<</code>>>

قسمت های قرمز رنگ مربوط به یک سری مقادیر است که به ترتیب نشان دهنده ی تصویر (نتیجه ی تابع imagecreate) ، اندازه ی متن ، زاویه ی متن ، محل X ، محل Y ، رنگ متن ، فایل مربوط به فونت متن ، خود متن است.

توضیح درباره ی header در php

در کل هنگامی که کاربران از یک صفحه در اینترنت بازدید می کنند ، یک سری اطلاعات میان سرور و مرورگر مبادله می شود. این اطلاعات شامل بسیاری از موارد می شوند که در php می توان آن ها را با استفاده از header به مرورگر کاربر ارسال کرد. در اینجا من با استفاده از همین تابع نوع فایل خروجی را به مرورگر می فهمانم. با این خط کد مرورگر متوجه می شود که خروجی یک فایل تصویری از نوع png است.

در نهایت تابع imagepng ، تصویر ما را کامل می کند و به نمایش می گذارد.

حالا که فایل تصویر امنیتی را ساختیم می توانیم در فرم ها از آن استفاده کنیم. برای استفاده از این تصویر تنها کاری که لازم است انجام دهید این است که یک تصویر بسازید و آدرس فایل captcha.php را در آن قرار دهید. برای بررسی صحت مقدار وارد شده توسط کاربر هم می توانید این گونه عمل کنید:

<<<code>>>

if( $_SESSION['captcha'] == $_POST['cap'] )

   echo "it is true";

else

   echo "it is false";

<<</code>>>

حالا که طرز ایجاد یک تصویر تصادفی و استفاده از آن را یاد گرفتید می توانید خودتان به هر نوعی که دوست دارید آن را تغییر دهید و تصویر زیبا تر و کامل تری را بسازید. من برای این که ایده های جالب تری در ذهن شما به وجود بیاید این سوالات را برایتان مطرح می کنم تا خودتان به حل آن ها بپردازید. اگر به نتیجه رسیدید ، آن را در بخش نظرات این مطلب و یا در انجمن بیان کنید. در صورت بروز هر گونه مشکلی هم ، من پاسخگو هستم. امیدوارم بتوانم کمکی کرده باشم.

سوالات:

  • چگونه می توان دو تصویر کپچا در یک صفحه و با استفاده از یک فایل ایجاد کرد ، به گونه ای که هر دو به درستی کار کنند و بتوان مقادیر آن ها را بررسی کرد؟
  • چگونه می توان برای متن تصویر تصادفی ، رنگ تصادفی ایجاد کرد؟
  • چگونه می توان خواندن تصویر تصادفی را با استفاده از خط ها ، نقطه ها و دیگر موارد سخت تر کرد؟
ارسال نظر برای این مطلب
این نظر توسط محمد حمیدیان در تاریخ 6 سال پیش و 16:58 دقیقه ارسال شده است

سلام . این کد رو کجا باید قرار بدم؟

if( $_SESSION['captcha'] == $_POST['cap'] )
echo "it is true";
else
echo "it is false";
پاسخ : این کد باید در فایلی باشه که اطلاعات فرم به اون فایل php فرستاده میشه. در اونجا برای بررسی درست بودن مقدار وارد شده توسط کاربر از شرط بالا استفاده می کنید و بر اساس اون هر کاری که خواستید رو انجام میدید.

این نظر توسط محمد مهدی قریشی در تاریخ 7 سال پیش و 19:07 دقیقه ارسال شده است

با تشکر فراوان از مقاله ی مفیدتان

این نظر توسط chiro در تاریخ 7 سال پیش و 5:42 دقیقه ارسال شده است

مرسی ممنو ن از مقاله ی مفید و سایت خوبتون


نام
ایمیل (منتشر نمی‌شود)
وبسایت
:) :( ;) :D ;)) :X :? :P :* =(( :O @};- :B :S
کد امنیتی
رفرش
کد امنیتی
نظر خصوصی
مشخصات شما ذخیره شود ؟ [حذف مشخصات] [شکلک ها]
ابزارهای خاص
جعبه ی پیوند لینک کوتاه کن رایگان ارزیابی آنلاین سایت و وبلاگ به صورت رایگان
تبلیغات
تبلیغات ارزان و پربازدهتبلیغات ارزان و پربازده
تبلیغات متنی
درباره ما
لوگوی ابزارها قالب
سایت ابزارها قالب برای خاص بودن آفریده شده است. به امید این که خاص ترین باشیم.
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • تبلیغات
    تبلیغات ارزان و پربازدهتبلیغات ارزان و پربازده

    آمار سایت
  • کل مطالب : 215
  • کل نظرات : 269
  • افراد آنلاین : 3
  • تعداد اعضا : 3196
  • آی پی امروز : 38
  • آی پی دیروز : 115
  • بازدید امروز : 196
  • باردید دیروز : 822
  • گوگل امروز : 3
  • گوگل دیروز : 6
  • بازدید هفته : 1,809
  • بازدید ماه : 10,306
  • بازدید سال : 101,676
  • بازدید کلی : 1,788,111
  • کدهای اختصاصی
    یادبود 175 شهید غواص
    یادبود 175 شهید غواص