وارد کردن کد امنیتی (کپچا) در وبسایتها، گاها برای کاربران واقعی، کاری بسیار دشوار و آزار دهنده است است. jReply یک اسکریپت برای نمایش کد امنیتی در وبسایتمان برای کاربران نوشته است، که در عین راحتی در نوشتن برای کاربران واقعی، از ورود روباتها نیز جلوگیری میکند. کد نوشته شده نیز به منظور راحتی در تطبیق و تغییر آن ساده و قابل درک نوشته شده است.
کد زیر همان کد استفاده شده در اسکریپت تصویر امنیتی ساده (کپچا) است . توجه کنید که کد زیر به تنهایی کار نمیکند و نیازمند فونت و لیست لغات است که به صورت کامل ضمیمه شده. این کد جهت مطالعه قرار داده شده است.
<?php function warpedCaptcha($text) { /* this function takes the original captcha text and shuffles the vowels + y around in order to deliver more variable captcha text */ if (5 > rand(0,6)) return $text; //only parttime warping $ltrs = array('b'=>'b','c'=>'c','d'=>'d','f'=>'f','g'=>'g','h'=>'h','j'=>'j', 'k'=>'k','l'=>'l','m'=>'m','n'=>'n','p'=>'p','q'=>'q','r'=>'r', 's'=>'s','t'=>'t','v'=>'v','w'=>'w','x'=>'x','z'=>'z'); $vkeys = $vltrs = explode(',','a,e,i,o,u,y'); shuffle($vkeys); $vowels = array(); foreach($vkeys as $ndx=>$vkey) $vowels[$vkey] = $vltrs[$ndx]; //the vowels + y are now jumbled up $ltrs = array_merge($ltrs,$vowels); //full associative array of alphabet with randomized vowels + y $text = str_split($text); $captcha = ''; foreach($text as $txt) $captcha .= $ltrs[$txt]; return $captcha; } /* xsixlw.txt is a long string of 6 letter words concatenated together. We pick a word at random from this text */ $fp = fopen('xsixlw.txt',"r"); $count = filesize('xsixlw.txt')/6 - 1; $pos = 6*rand(0,$count); fseek($fp,$pos); $captcha = warpedCaptcha(trim(fread($fp,6))); fclose($fp); session_start(); $_SESSION['captcha'] = $captcha; //store the captcha to check later once the user has solved it session_write_close(); $im = imagecreatetruecolor(200,70);//200 x 70 pixel image $black = imagecolorallocate($im,0,0,0); imagecolortransparent($im,$black);//give it a black background switch(rand(0,4)) { case 0:$color = imagecolorallocate($im,34,155,91);break; case 1:$color = imagecolorallocate($im,233,26,74);break; case 2:$color = imagecolorallocate($im,233,26,195);break; case 3:$color = imagecolorallocate($im,244,178,19);break; case 4:$color = imagecolorallocate($im,53,125,199);break; } //pick a random color for the text $x = 20;$y = 47;//the starting position for drawing for ($i=0;$i<6;$i++) { $angle = rand(-8,8) + rand(0,9)/10; $fontsize = rand(22,32);//pick a random font size $letter = substr($captcha,$i,1); $coords = imagettftext($im,$fontsize,$angle,$x,$y,$color,'oldsans.ttf',$letter); //draw each letter $x += ($coords[2]-$x) + 1; } header('Content-type:image/png'); imagepng($im); imagedestroy($im); ?>
نحوه استفاده از اسکریپت تصویر امنیتی:
1- استخراج فایلها (Extract Files) در یک فولدر مناسب در سرور:
simplephpcaptcha.php xsixlw.txt ldsans.ttf
2- در صفحه ای که میخواهید از تصویر امنیتی (کپچا) استفاده کنید، کد زیر را بنویسید:
<img height="70" width="200" src="path_to_folder/simplecaptcha.php"/>
3- ایجاد یک فیلد متنی برای دریافت کد امنیتی :
<form action="" method="post"> <input type="text" name="captcha" /> <input type="submit" name="submit" /> </form>
4- بررسی صحت کد امنیتی وارد شده در سمت سرور:
<? session_start(); if(isset($_POST['submit'])){ if($_SESSION['captcha'] == $_POST['captcha']){ echo "Captcha Is Correct<br>"; }else{ echo "Captcha Isn't Correct<br>"; } } ?>
.در صورت درست یا غلط بودن کد وارد شده پیامی ظاهر میشود که نتیجه کار را مشخص میکند. شما میتوانید به جای این پیغامها، هر عملی که باید در اسکریپتتان انجام شود را بنویسید.

سلام من چطور از کد کپجاد استفاده کنم فقط ثبت نام کردم ادامه باید جیکار کنم ممنون میشم از راهنمایی شما
سلام می شود ویدیو آموزش استفاده از اسکریپ را به جیمیل من ارسال کنید . تشکر.جیمیل من هست :ehsan.ghaneei2013@gmail.com
imagettftext(): Could not find/open font این خطا بعد از فعال کردن اکستنشن gd2 هم باز این خطا را داره
imagettftext(): Could not find/open font
سلام
واسه من حتی خود index مثال هم کار نمیکنه
ممنونم بابت این آموزش فوق العاده کاربردی
بسیار عالی کار میکنه خیلی دنبالش بودم
با عرض سلام و خسته نباشید و تشکر از زحمات شما
من این کد را در صفحه ی خودم که برای پروزه نهایی دانشگاه نوشتم ولی متاسفانه تصویر یا متن کپچا نشان داده نمی شود
لطفا در اسرع وقت راهنمایی کنید.
باتشکر…
به نام خدا
باسلام
مطالب نوشته شده مربوط به ایجاد کد کپچا خیلی مفید وکاربردی بود خواستم به این طریق از استاد تشکر کنم وآرزوی موفقیت وسلامتی برایتان دارم.
خیلی متشکرم
سلام و ارادت
آقا من این کد رو توی صفحهی ورود سایتم که با وردپرس و ووکامرس هست گذاشتم، البته بگم که کد رو تو صفحهی ورودی که توی قالبم هست گذاشتم نه صفحهی ورود خود وردپرس اما به مشکل برخوردم.
ابتدا به این عکس یک نگاهی بنداز:
http://uupload.ir/files/e5c_screen_shot_1397-02-31_at_15.56.52.png
۱- این فرم ورود هستش و قرار هست که وقتی کاربر متن عکس رو درست وارد کرد بتونه لاگین بکنه که این قابلیت وجود نداره و کد شما دوتا پیغام مبنی بر درست یا نادرست بودن تصویر چاپ میکنه، اول اگر امکانش هست لطف کنید راهنمایی کنید که چطوری باید این قابلیت رو به کُد اضافه کرد.
۲- اون پیغام اون زیر مربوط به دستر شرطی if هست که هرکاری کردم از بین نرفت.
اگر بتونید راهنمایی کنید این میشه یک کد برای اینکه اپراتور بخاد راستی آزمایی بکنه نیازی نباشه پلاگین نصب بکنه برای کپچا، توی هیچ سایت فارسی هم مشابه این وجود نداره و همه پلاگین معرفی کردن برای وردپرس و ووکامرس.
ممنون میشم راهنماییم کنید چون رباتها میان ثبتنام میکنن تو سایتم و ترافیک سایتمو بیخود میگیرند و نمیخام هم از پلاگین استفاده بکنم.
متشکرم از شما
سلام،
این فرم برای پروژه های php در نظر گرفته شده و برای وردپرس بهینه نیست و نیاز داره کمی با هوکهای وردپرس آشنایی داشته باشید.
برای درج این کپچا در فرم ورود وردپرس از فیلترهای
login_form_middle
وlogin_form
استفاده کنید و برای سنجش درستی از فیلترwp_authenticate_user
استفاده کنید.اگر به درستی پیاده سازی بشه ایرادی نداره و میشه ازش در وردپرس هم استفاده کرد.
سلام
الان کپچا تو صفحه login نمایش داده میشه ولی یه مشکلی داره
وقتی که if رو کنار username & pass تعریف میکنم که به سرور ارسال بشه و صحتش تایید بشه
کلا دستور …… if ($_SESSION رو نمیخونه مستقیم میره سر else و پیام میده که Captcha Isn’t Correct
دستور if هم که بردارم مشخصه هر چی توی fild نوشته بشه رو قبول میکنه
نمیدونم مشکل از کجاس میتونید راهنمایی کنید ؟
سلام،
تکه کد مورد نظر رو اینجا ارسال کنید شاید بتونم راهنمایی کنم.
سلام مجدد،
محتویات
$_SESSION["captcha"]
و$_POST["captcha"]
رو اکو کنید باهم مقایسه کنید ببینید محتویات دو متغیر چه فرقی باهم دارن.همراه فایل یک فایل پیاده سازی شده php هم هست از اون میتونید کمک بگیرید.
session ijad nemikne aslan ke moghayese kone
session_start();
رو ببرید بیرون و بالاتر از همه شرطها.ارور ریپورتینگ رو هم فعال کنید.
ممنون میشم فارسی بنویسید 🙂
اوکی شد
من واسه سشن هام اسم خاص تعریف کرده بودم کد شمارو تغییر دادم اوکی شد
خواهش میکنم، موفق باشید
سلام دستتون درد نکنه خیلی عالیه این پست
من یه مشکلی دارم اونم اینه که وقتی if رو تو کد نویسی میذارم صحت کد رو بررسی نمیکنه مستقیم میره روی else و پیام Captcha Isn’t Correct رو میده
و وقتی هم که if رو برمیدارم کپچا رو نشون میده ولی مهم نیست چی مینویسی تو فیلد هرچی باشه قبول میکنه و login میشه
مشکل کجاست من درک نمیکنه
سلام
برای من این ارور رو میدهWarning: imagettftext(): Could not find/open font
و توی عکس اصلا حروف نمیاد
سلام
باید کتابخانه php-gd رو نصب کنید و در فایل php.ini باید فعال باشه.
من از لوکال هاست استفاده میکنم و پروژه دانشگاهی هستش.
لوکال هاست هم میشه کتابخانه نصب کرد؟
در فولدر مربوط به php در فایل php.ini سطر extension=php_gd2.dll رو از کامنت در بیارید. (علامت ; رو از اولش پاک کنید) و آپاچی رو ری استرات کنید.
سلام
من یه مشکلی که دارم این که تصویر کد نشون داده نمیشه در موبایل وسیستم فرقی هم نداره…
جای تصویر کد این متن رو نشون میده
V1 SHUTDOWN ON 31-3-2108
ممنون میشم راهنمایی کنید…توی ثبت نام هر سایتی به مشکل خوردم
این مشکل از سمت وبسایتها هست و نه شما. گوگل سرویس ریکپچا ورژن 1 رو غیرفعال کرده و تا الان همه باید آپگرید میکردن به ورژن بالاتر. به خود سایت مد نظر اطلاع بدید.
با تشکر از مطالب خوب سایت تون
چند روزی هست که من و شاگردانم نمیتونیم وارد سایت بشیم . میگن باید روی فرم های سایت کد کپچا بزاریم تا سایت باز بشه . شما میتونین ما رو راهنمایی کنین ؟ ممنونم
سلام،
از چه سیستمی برای سایتتون استفاده میکنید؟
ممنون عالی بووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووود
عالی بود.
خیلی ممنون دوست عزیز
با سلام
ما پروژه ای تحت عنوان امنیت قسمت کپ چا داریم که اطلاعات در این زمینه خیلی کمه .شما اطلاعاتی دارین اگه با پرداخت هزینه ما رو در این زمینه راهنمایی کنین.اگه قبول کردین من منتظر ایمیل شما هستم.
دادش دمت گرم – خیلی مفید بود مطلبت
فقط یه چیزی تو فابل index , یادت رفته php رو بعد ?> بنویسی , البته چیز مهمی نیست :))
بازم ممنون – خیلی کمکم کرد
سلام.
من هر کاری کردم نتونستم تو فرم ثبت نام سایتم اینو قرار بدم.
میتونید قرار بدید ؟؟
خواهش می کنم !
به من ایمیل بدید :
hrestart79@gmail.com
یا بیایید یاهومسنجر :
jadidnet