Train

PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نوشتن captcha ساده


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!!
}

tamiz_tarin
12-27-2009, 01:25 AM
سلام:
اگر شما بخوای آیا می تونی CAPTCHA را دور بزنی؟
یا بپیچونی؟


این روش چقدر امنه؟

آیا امینت این روش توی asp یا php با هم فرقی می کنه؟
مرسی

justin123
12-27-2009, 03:49 AM
لطفا يك مثلا براي asp هم بزنيد

PLUS
01-02-2010, 02:37 AM
سلام:
اگر شما بخوای آیا می تونی CAPTCHA را دور بزنی؟
یا بپیچونی؟


این روش چقدر امنه؟

آیا امینت این روش توی asp یا php با هم فرقی می کنه؟
مرسی

دوست عزیز دور زدن captcha فقط به نوع نوشته و خمیده و کج بودن و ... نوشته های خروجی بستگی داره؛

اکثر captcha ها رو میشه دور زد؛ مثلاً به پروژه reCaptcha اگه توجه کنید برای همین کار هستش و مثلاً اون رو نمیشه دور زد یا مثلاً captcha هایی که google نشون میده قابل دور زدن نیست.

ولی در کل برای دور زدن captcha کافیه بالعکس ساخت captcha عمل کنیم؛ با این روش حتی اگه الگوریتم captcha که google هم قرار داده رو داشته باشیم؛ با معکوس کردن اون میشه اون رو دور زد...
برای اکثر captcha ها هم میشه الگوریتم رو حدس زد.....

;;)

tamiz_tarin
01-10-2010, 08:34 PM
می شه یک کمی بیشتر توضیح بدید؟

الگوریتم را بدونی چه کمکی می کنه؟

ضمن اینکه یک هکر می خواد یک ملیون بار از این قسمت رد شه و دیتابیس را پر کنه

این الگوریتم چگونه می تونه captach را حدس بزنه یا دور بزنه

مرسی

مخصوصا که نوشته آن تصادفیه

PLUS
01-10-2010, 08:42 PM
می شه یک کمی بیشتر توضیح بدید؟

الگوریتم را بدونی چه کمکی می کنه؟

ضمن اینکه یک هکر می خواد یک ملیون بار از این قسمت رد شه و دیتابیس را پر کنه

این الگوریتم چگونه می تونه captach را حدس بزنه یا دور بزنه

مرسی

مخصوصا که نوشته آن تصادفیه

دوست عزیز منظور از الگوریتم؛ الگوریتم ساخته شدن نوشته نیست!
الگوریتم چگونه نوشته شدن نوشته هستش!!!

با داشتن این الگوریتم میشه فهمید که اگه به عنوان مثال فلان پیکسل های یک عکس رنگشون فرق داشت یعنی حرف اول a هستش و به همین صورت!!

برای اطلاعات دقیق تر هم کسی نمیتونه کمکی بهتون بکنه!!! خودتون باید فکر کنید که چه کار باید بکنید!!

بدرود