PLUS
11-09-2009, 09:03 PM
همونطوری که در جریان هستین یکی از متداول ترین راههای هک کردن یک سایت روشی به نام BruteForce هست؛ که با کمک آن میتوان رباتی نوشت که به طور اتوماتیک اقدام به وارد شدن به یک سایت با نام های کاربری و رمزهای عبور مختلف کرد؛
برای جلوگیری از این حملات راههای زیادی وجود داره؛
یکی از بهترین راههای ممکن استفاده از CAPTCHA یا به عبارت دیگه کد امنیتی هستش؛
روش کار CAPTCHA به این صورت هستش که یک عکس حاوی نوشته یا عدد رو به کاربر نشون میده و کاربر باید اون رو وارد کنه؛ که انجام این کار از ورود های اتوماتیک جلوگیری میکنه
در این آموزش قصد داریم نحوه نوشتن یک CAPTCHA خیلی ساده رو با هم مرور کنیم؛
برای این کار به چندتا چیز احتیاج داریم؛
اولین و مهمترین چیزی که لازم داریم ساخت یک عکس با متن random هستش
برای نمایش عکس از توابع GD استفاده میکنیم؛
توجه داشته باشید که باید GD نصب باشه!!
برای اینکه بتونیم تشخیص بدیم متن راندوم که به کاربر نشون داده شده چی بوده ساده ترین راه استفاده از Session هست؛
برای نشون دادن متن مورد نظر احتیاج به فونت داریم؛ که برای مثال توی این درس از فایل font/sans.ttf استفاده شده.
مرحله بعدی قرار دادن عکس درست شده توی صفحه login یا صفحه مورد نظر هستش
آخرین مرحله هم چک کردن متن وارد شده با متن ذخیره شده توی Session هست.
برای ساخت عکس مورد نظر کافیه کد های زیر رو توی یک فایل (مثلاً captcha.php ) قرار بدیم:
<?php
$font='fonts/Disney.ttf';
$count=40; // تعداد خط ها
$fSize=40; // اندازه فونت
$height=50; // ارتفاع عکس
$width=150; // عرض عکس
$img=imagecreate($width,$height) or die("You should install GD first!!");
$backColor=imagecolorallocate($img,255,255,255);// رنگ پشت عکس
$lineColor=imagecolorallocate($img,255,238,238);// رنگ خط ها
$textColor=imagecolorallocate($img,0,238,255);// رنگ نوشته
$string="abcdefghijklmnopqrstuvwxyz0123456789";
$str='';
for($i=0;$i<6;$i++){
$char=rand(0,36);
$str.=$string{$char};
}
$textbox=imagettfbbox($fSize,0,$font,$str) or die('Error in imagettfbbox function or font!!');
$x=($width-$textbox[4])/2;
$y=($height-$textbox[5])/2;
imagettftext($img,$fSize,0,$x,$y,$textColor,$font, $str) or die('Error in imagettftext function!!');
for($i=0;$i<$count;$i++){
$x1=rand(0,$width);$x2=rand(0,$width);
$y1=rand(0,$width);$y2=rand(0,$width);
imageline($img,$x1,$y1,$x2,$y2,$lineColor);
}
header('Content-Type: image/jpeg');
imagejpeg($img,NULL,100);
imagedestroy($img);
session_start();
$_SESSION['img_text']=$str;
برای استفاده از عکس ساخته شده؛ کافیست کد زیر را در صفحه خود و در داخل تگ form قرار بدیم :
<img alt="Captcha" src="captcha.php" />
<input type="text" name="captcha" />
حالا برای چک کردن اینکه آیا کد درست وارد شده یا نه؛ خیلی راحت میتونیم از کد زیر توی صفحه ای که در اون کارها انجام میشه؛ بزاریم:
<?php
session_start();
if($_SESSION['img_text']!=$_POST['captcha']){
die('Error in inserted Captcha!!');
}else{
// ... OK, continue!!
}
برای جلوگیری از این حملات راههای زیادی وجود داره؛
یکی از بهترین راههای ممکن استفاده از CAPTCHA یا به عبارت دیگه کد امنیتی هستش؛
روش کار CAPTCHA به این صورت هستش که یک عکس حاوی نوشته یا عدد رو به کاربر نشون میده و کاربر باید اون رو وارد کنه؛ که انجام این کار از ورود های اتوماتیک جلوگیری میکنه
در این آموزش قصد داریم نحوه نوشتن یک CAPTCHA خیلی ساده رو با هم مرور کنیم؛
برای این کار به چندتا چیز احتیاج داریم؛
اولین و مهمترین چیزی که لازم داریم ساخت یک عکس با متن random هستش
برای نمایش عکس از توابع GD استفاده میکنیم؛
توجه داشته باشید که باید GD نصب باشه!!
برای اینکه بتونیم تشخیص بدیم متن راندوم که به کاربر نشون داده شده چی بوده ساده ترین راه استفاده از Session هست؛
برای نشون دادن متن مورد نظر احتیاج به فونت داریم؛ که برای مثال توی این درس از فایل font/sans.ttf استفاده شده.
مرحله بعدی قرار دادن عکس درست شده توی صفحه login یا صفحه مورد نظر هستش
آخرین مرحله هم چک کردن متن وارد شده با متن ذخیره شده توی Session هست.
برای ساخت عکس مورد نظر کافیه کد های زیر رو توی یک فایل (مثلاً captcha.php ) قرار بدیم:
<?php
$font='fonts/Disney.ttf';
$count=40; // تعداد خط ها
$fSize=40; // اندازه فونت
$height=50; // ارتفاع عکس
$width=150; // عرض عکس
$img=imagecreate($width,$height) or die("You should install GD first!!");
$backColor=imagecolorallocate($img,255,255,255);// رنگ پشت عکس
$lineColor=imagecolorallocate($img,255,238,238);// رنگ خط ها
$textColor=imagecolorallocate($img,0,238,255);// رنگ نوشته
$string="abcdefghijklmnopqrstuvwxyz0123456789";
$str='';
for($i=0;$i<6;$i++){
$char=rand(0,36);
$str.=$string{$char};
}
$textbox=imagettfbbox($fSize,0,$font,$str) or die('Error in imagettfbbox function or font!!');
$x=($width-$textbox[4])/2;
$y=($height-$textbox[5])/2;
imagettftext($img,$fSize,0,$x,$y,$textColor,$font, $str) or die('Error in imagettftext function!!');
for($i=0;$i<$count;$i++){
$x1=rand(0,$width);$x2=rand(0,$width);
$y1=rand(0,$width);$y2=rand(0,$width);
imageline($img,$x1,$y1,$x2,$y2,$lineColor);
}
header('Content-Type: image/jpeg');
imagejpeg($img,NULL,100);
imagedestroy($img);
session_start();
$_SESSION['img_text']=$str;
برای استفاده از عکس ساخته شده؛ کافیست کد زیر را در صفحه خود و در داخل تگ form قرار بدیم :
<img alt="Captcha" src="captcha.php" />
<input type="text" name="captcha" />
حالا برای چک کردن اینکه آیا کد درست وارد شده یا نه؛ خیلی راحت میتونیم از کد زیر توی صفحه ای که در اون کارها انجام میشه؛ بزاریم:
<?php
session_start();
if($_SESSION['img_text']!=$_POST['captcha']){
die('Error in inserted Captcha!!');
}else{
// ... OK, continue!!
}
