تقریبا میتوان گفت کمتر کسی هست که با کد کپچا آشنایی نداشته باشد و تابحال ندیده باشند.
کدی که اکثرا در تمامی فرم ها در وب سایت ها قرار دارد و شما میبایست با پر کردن آن از الگویی که به شما داده شده است , به وب سایت بفهمانید که روبات های هکر نیستید .
در این اسکریپت اول از همه یک شماره کاملا تصادفی (random) تولید و سپس از خروجی یک عکس می سازیم . اگر کاربر فرم را با مقدار درست کپچا – captcha ارسال کرد ، بقیه مراحل مثل insert کردن داده ها داخل دیتابیس یا ارسال ایمیل و…. انجام میدیم
قدم اول : ساخت یک صفحه HTML
کد زیر شامل یک ورودی اسم ، ایمیل و کپچا با دکمه submit است . این کد ها را در فایل index.php ذخیره میکنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html> <head> <title>Simple CAPTCHA Script in PHP</title> </head> <body> <form action="" method="post"> <input type="text" name="name" /> <input type="email" name="email" /> <input type="text" name="captcha" /> <input type="submit" value="submit" /> </form> </body> </html> |
قدم دوم : ساخت کد کپچا
یک فایل captcha.php ایجاد و داخل بلاک php تابع session_start()
را فراخوانی می کنیم.بعد با تابع rand()
یک مقدار عدید ایجاد و داخل متغییر سئشن ذخیره میکنیم .
1 2 3 |
session_start(); $captcha_num = rand(1000, 9999); $_SESSION['code'] = $captcha_num; |
کد بالا فقط اعداد رندوم تولید می کند . اگر قصد دارید که ترکیبی از اعداد و حروف را ایجاد کنید از کد زیر استفاده کنید.
1 2 3 4 |
session_start(); $captcha_num = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz'; $captcha_num = substr(str_shuffle($captcha_num), 0, 6); $_SESSION["code"] = $captcha_num; |
از هرکدام از کد php بالا بنابر نیاز خود استفاده کنید.
تعریف اندازه تصویر کپچا و همچنین اندازه فونت
1 2 3 |
$font_size = 30; $img_width = 70; $img_height = 40; |
تعریف content type فایل captcha.php به صورت عکس
1 |
header('Content-type: image/jpeg'); |
ساخت کپچا در php با اندازه و رنگ پس زمینه دلخواه
1 2 |
$image = imagecreate($img_width, $img_height); // create background image with dimensions imagecolorallocate($image, 255, 255, 255); // set background color |
تعیین رنگ متن کپچا به صورت rgb
1 |
$text_color = imagecolorallocate($image, 0, 0, 0); // set captcha text color |
ساخت کپچا از رشته تولید شده و گرفتن خروجی عکس در مروگر با فونت دلخواه
1 2 |
imagettftext($image, $font_size, 0, 15, 30, $text_color, 'font.ttf', $captcha_num); imagejpeg($image); |
قدم سوم : نمایش کد امنیتی (captcha) در فرم
در قدم اول آموزشمان ، ما فیلد های مربوط به کپچا را اضافه کردیم . برای نمایش کپچا از تگ img و قرار دادن مقدار captcha.php در مشخصه src
استفاده می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html> <head> <title>Simple CAPTCHA Script in PHP</title> </head> <body> <form action="" method="post"> <input type="text" name="name" /> <input type="email" name="email" /> <img src="captcha.php" /><input type="text" name="captcha" /> <input type="submit" value="submit" /> </form> </body> </html> |
قدم چهارم : بررسی کپچا بعد از ارسال فرم
حالا باید کد کپچا ارسال شده را چک کنیم . اگر مقدار ارسال شده با مقداری که در سئشن ذخیره شده یکسان بود مقدار true
و اگر اشتباه بود مقدار false
را داخل شرطمان بر میگردانیم
1 2 3 4 5 6 7 8 9 10 11 |
<?php session_start(); print_r($_POST); if(isset($_POST) & !empty($_POST)){ if($_POST['captcha'] == $_SESSION['code']){ echo "correct captcha"; }else{ echo "Invalid captcha"; } } ?> |
امیدوارم از آمورش ساخت کپچا در php (کد امنیتی) استفاده برده باشید و در پروژه هایی که می نویسید بخصوص در قسمت صفحات لاگین برای جلوگیری از حملات brute-force و در صفحه نظرات برای پیشگیری از اسپم شدن از این مکانیزم استفاده کنید.
اگر مشکلی در پیاده سازی این کد ها در پروژه هاتون داشتید لطفا از قسمت نظرات با ما در ارسال کنید . سریعا پاسخگوی سوالات شما هستیم .
برای دریافت سورس این پروژه لطفا از باکس دانلود پایین این بخش استفاده کنید .
موفق و پیروز باشید.
سلام، بسیار ممنون.
چطوری میتونم با jQuery یه دکمه بزار که مقدارشو ریست کنه؟
سلام. باید درخواست ajax به فایل php که کپچا تولید میکنه رو بفرستید و خروجی تصویر رو بعد دریافت در تگ img قرار بدید
با سلام ووقت بخیر من همین کد زدم ولی تصویر برای من نمایش داده نمیشه من چیکار کنم که بتوانم تصویر ببنیم
سلام ممنون
فایل captcha.php داخل مرورگر اول باز کنید ببینید اصلا تصویری نمایش داده میشه یا نه
من از wamp استفاده کردم برای همین نمایش نمیداد از xamp استفاده کردم درست شد imagefill و imagestring کم داشت اونم اضافه کردم الان در سایت قرار دادم
funcubic.ir
درست جواب گرفتم
سلام ممنون از شما.یه مشکلی که وجود داره بعد از اینکه نظر ثبت میشه کد کپچا عوض نمیشه .فقط بعد از لود صفحه کد کپچا عوض میشه. و مشکلی که به وجود میاد اینه که با یه کد کپچا بی نهایت کامنت میتونه بده
سلام.
در هنگام ثبت کامنت باید اون کد کپچا رو از سشن حذف کنید تا دیگر قابل استفاده نباشه.
در هر بار لود صفحه کد کپچای جدید بسازید
میشه کد کاملش رو هم قرار بدید؟؟؟یعنی مثلا خروجی کپچا و… همش با هم باشه
سلام. کد رو باید با صفحه لاگین خود هماهنگ کنید و جدا نمیشه استفاده کرد
سلام.امکان دارد در یک باکس کد ها را کامل بگذارید؟
سلام. کد بسیار ساده هست و حتما باید همراه فرم استفاده کنید
سلام مهندس شفیعی نازنین من میخوام وقتی کاربر میخواد جواب کپچای محاسباتی رو بده فقط صفحه کلید عددی براش بیاد مثل خیلی از سایتها باید چیکار کنم ممنون از سایت خوبتون
سلام. باید جستجو کنید بنده جواب تمام سوالات رو نمیدونم حتی زمانی که سوالی پرسیده میشه بنده هم جستجو می کنم در گوگل. برنامه نویسی همینه باید چستجوی گوگل رو یاد بگیرید
*تایپ رو برابر با number قرار میدیم ( نه text)
سلام مهندس شفیعی عزیز من از کپچای ریاضی برای فرم ثبت آگهی استفاده کردم میخوام بدونم برای فرم ویرایش آگهی هم لازمه از کپچا استفاده کنم ؟ یا فقط وقتی اطلاعاتی رو میخواهیم در دیتابیس insert کنیم باید از کپچا استفاده کنیم ؟ ربات ها دقیقا چیکار میکنن آیا پشت سرهم اطلاعات وارد دیتابیس می کنن یا جور دیگه ای عمل میکنن ؟تشکر از سایت خوبتون
سلام. فقط برای ارسال
سلام مطلب مفید و کاملی بود و روی ورژن ۵٫۶ پی اچ پی به درستی کار کرد. فقط میخواستم درخواست کنم اگر زمان داشتید برای ورژن ۷٫۴ هم یه آموزشی تهیه کنید. چون بیشتر کاربر ها به سمت ورژن های ۷٫۴ نقل کردن
تشکر از سایت خوبتون
سلام. خوشجالیم که مفید واقع شده.
توجه داشته باشید شما باید به این مطلب به عنوان یک آموزش نگاه کنید نه کد آماده که قابل کپی برداری و استفاده باشه.
هدف آموزش نشان دادن روش انجام کار هست و شما بعد یادگیری باید در شرایط مختلف بتونید با منطق پروژه این امکان رو پیاده سازی کنید
با سلام و خسته نباشید خدمت شما سایت نت پارادیس من هم شبیه اکثر دوستان در قسمت نمایش کد مشکل داشتم ولی با استفاده از راهنمایی های افرادی که همین مشکل را داشتند درست شد با تشکر
سلام. ممنون و خوشحالیم که مفید واقع شد.
موفق باشید.
سلام.راهی هست این عکس کپچا داخل دایرکتوری ذخیره بشه؟
سلام. برای ذخیره در اینجا به جای
imagejpeg($image);
از file_put_contents(‘file.jpg’,$image) برای ذخیره استفاده کنید.
سلام خسته باشید ببخشید برای من عکس رو میاره ولی روی عکس چیزی نمی نویسه یعنی عکس فقط سفیده و وقتی رنگ بک گراند رو عوض می کنم رنگ عکس تغییر می کنه ولی اصلا اثری از نوشته نیست لطفا راهنماییم کنید.
سلام. ممنون.
باید توجه داشته باشید که از چه ورژن php استفاده می کنید که روی ۵٫۶ تست شده و همچنین سورس کدنهایی رو دانلود و استفاده کنید.
همچنین از فعال بودن gd در هاست مطمین باشید.
دوستانی که با آدرس تصویر مشکل دارن یا تصویر لود نمیشه براشون از روس زیر آردس دهی کنند.
$font = dirname(__FILE__) . ‘/fontname.ttf’;
سلام اموزشتون خیلی خوبه من دانشجوهستم یه پروژه دارم مینویسم که captchaباید داشته باشه قسمت ارزیابی اینکه درسته یا نه تو چه صفحه ای باید نوشت؟تو صفحه نام نویسی یا passwordیا captcha ؟
سلام. داخل هر صفحه ای که نیاز است مثلا فرم ثبت نام یا فراموشی رمز این رو مطابق آموزش اضافه کنید. مثلا تو این آموزش ما خودمان اومدیم یک فرم مثالی ایجاد کردیم که input با name=captcha داره. و کد های php رو هم میتونید داخل یک فایل captcha.php بزارید و کد مربوط به جی کویری هم در همان صفحه ای که فرم قرار دارید بزارید تا درخواست ajax بدرستی ارسال بشه
عشقید بخدا این آموزش های رایگان شما میلیون ها قیمت داره
خیلی خیلی ممنون
ممنونم. خیلی خوشحالیم که مفید واقع شده.
موفق و پیروز باشید.
سلام. خصوصیت alt به عکس چجوری میشه اضافه کرد؟ ممنون
سلام. این آموزش رو مطالعه کنید :
آموزش HTML – تصاویر در HTML
موفق باشید.
این ارور رو هم میده
imagettftext(): Could not find/open font in C:\wamp64\www\t\s.php on line 13
سلام. فایل فونت مورد نظر را در اسکریپت درست آدرس دهی کنید چون الان ارور مربوط به پیدا نشدن فایل فونت ttf است.
موفق باشید.
سلام من وقتی کار رو انجام میدم با ارور زیر مواجه میشم
gd-jpeg v1.0 (using IJG JPEG v90), default quality
دوستانی که کد براشون اجرا نمیشه دقت کنید من راهشو یاد گرفتم.اولندش که اون تابع header رو اصلا نممیخواد بزارید.اگه بزارید کار نمیکنه.
دومندش اون متغیر $font رو به صورت زیر بنویسید:
$font = __DIR__ . ‘/font.ttf’;
اون font.ttf هم که فونت من هست.
تمام شد و رفت.
دمت گرم واقعا عالی بود
سلام. خوشحالیم که مفید واقع شده.
موفق و پیروز باشید.
سلام.ببخشید لطفا کدی رو که باید توی فایل aptcha.php بزاریم رو به صورت کامل و متوالی بزارید.ممنون.
سلام. کد کامل از بخش باکس دانلود قابل دانلود و استفاده است.
موفق باشید.
آقا من اینم که گفتید اضافه کردم ولی باز تصویرنمیاد!
چیکار کنم به نظرتون؟
واقعا از اینجا نمیشه راهنمایی خاصی انجام داد. تست کنید آیا تصویری اصلا در فولدر موردنظر ساخته میشه یا خیر و بعد بقیه مراحل رو خودتون باید با جستجو و تست کردن باگ یابی کنید.
gd2 رو چجوری میتونم فعال کنم؟
سلام. در هاست اشتراکی شما دسترسی اینکار رو ندارید و باید تیکت بزنید به هاستینگ تا بررسی کنند
در سرور شخصی و یا لوکال هاست میتوانید فایل php.ini را ویرایش و خط زیر را extension=php_gd2.dll اضافه و وب سرور را ریستارت کنید.
موفق باشید.
خط content type را در کد ها پاک کردم مشکل حل شد.
خیلی هم عالی . موفق باشید.
وقتی https فعال باشه در کروم و اپرا نمایش داده نمیشه کپچا ولی در موزیلا بدون مشکل هست.
سلام. در موزیلا مشکلی نداره ولی در کروم کپچا نشون داده نمیشه. مشکل چی می تونه باشه؟
سلام. مجددا چک شد. مشکلی نداره در هر دو مرورگر درست نمایش داده میشه.
موفق باشید.
سلام وقت شما بخیر جا داره از آموزش خوبتون تشکر کنم ممنون وسپاس فراوان
من تمام کارها رو انجام دادم و تصویر امنیتی رو ساختم حالا میخوام با دکمه رفرش این تصویر رو به صورت ایجکس تغییر بدم که به جای تصویر کارکترها ایجاد میشه
این کدهای من
….
imagestring($im, 5, 30, 15, $code, $fg);
for ($i=0;$i+�A9�Ci�J<(�/�DԴQ
….
ممنون میشم راهنمایی کنید
سلام . خوشحالم که مفید واقع شده . شما باید آدرس فایل captcha.php را به مقدار src در تگ img بدید تا فراخوانی بشه .
موفق باشید.
سلام
روی زمپ جواب نمیده ممنون میشم راهنمایی کنید حتی سورس خودتون هم جواب نمیده درواقع عکس رو نمیاره
سلام . مشکلی نداره روی لوکال تست شده و مشکل از سیستم شماست و احتمالا توابع image* براتون اجرا نمیشن . موفق باشید.
سلام
کلا تصویر که میسازم با php ارور میده خواهش میکنم کمک کنید تا شکل رو رفع کنم این توابع image کجا قرار داره
The image http://127.0.0.1/ cannot be displayed because it contains errors
سلام. خب دوست عزیز شما این خط header(“Content/text:image/png”); در فایل Captcha.php کامنت کنید و دوباره این فایل رو از مرورگر باز کنید ببینید جه اروری داره . اون ارور رو در گوگل جستجو ومشکل رو حل کنید . که خب مشکل میتونه از فعال نبود اکستنشن gd2 هم باشه که باید از php.ini فعال و بعد وب سرور را یکبار ریستارت کنید.
با سلام
من از xamp استفاده میکنم، کد رو که اجرا کردم ،تصویر نمایش داده نشد.
extension=php_gd2.dll رو هم در php.ini فعال کردم.
مشکلش چیه؟
ممنون
سلام . بازم تست شد و مشکلی نداره .

بهتره فایل captcha.php را یکبار از url باز و تست کنید.
مشکل مطمینا از سمت لوکال هاست شماست. ورژن php تست شده هم ۵٫۶ است.
موفق باشید.
با سلام
برای ساخت کپچا غیر حساس به حروف چه باید کرد؟
سلام. از تابع strcasecamp() برای مقایسه مقادیر ارسالی از کاربر و مقادیر ذخیره شده در سیشن استفاده کنید
strcasecmp("Netparadis","NETPARADIS");
موفق باشید
با سلام و خسته نباشید
ببخشید وقتی اجرا کردم این کد رو
captcha.php
از همون اول لود نمیشه که بتونم کد رو وارد کنم
سلام ممنونم . ببینید این فایل captcha.php یک عکس تولیذ میکنه که برای اینکه مرورگر اون رو به عنوان عکس بشناسه به اول کد header(“Content/text:image/png”);
رو اضافه کردیم و همچنین قرار نیست به صورت عادی چیزی ببینید باید اون رو داخل یک تگ img و ویژگی src فراخوانی کنید.
موفق باشید.
برای رفرش کردن کد امنیتی از چه کدی باید استفاده کنیم؟
برای رفرش کپچا میتونید از جی کویری و اجکس بهره ببرید به اینصورت که با کلیک بر روی خود عکس کپچا یا هر عکس کوچکی کنار کپچا که به معنی رفرش باشد , یک درخواست ajax به فایل captcha.php انجام بشه و خروجی جایگرین عکس فعلی بشه .
کد کامل
capimg کلاس تگ img که کپچا رو نشون میده است .
موفق باشید
سلام و خسته نباشید . من همین دستورات ajax رو برای رفرش کردن نوشتم.ولی فقط یک بار تصویر عوض می شه و بعد فقط عدد تصادفی در پشت صحنه عوض می شه و تصویر عوض نمیشه.نظرتون چیه ؟
سلام. ممنون.
تا کد شما رو نبینم نمیشه قطعی نظر داد مشکل از کجاست.
لطفا سورس کد نهایی را از باکس دانلود, دریافت کنید و مستقیما اجرا کنید تا با مقایسه هر دو نتیجه رو ببینید.
همچنین در این موارد بهتر است که بخش console و network مرورگر رو هم چک کنید.
من نتیجه رو تو console .log نگاه کردم ی سری علامت های نامفهوم چاپ می کنه.ی سوال ؟
attr(‘src’, ‘img/’+msg + ‘.png’)
این دایرکتوری img چیه نوشتید ؟
تصاویر کپچای ساخته شده داخل این فولدر ذخیره می شوند که بهتره این فولدر رو در ریشه فایل captcha.php داشته باشید.
ببخشید منظور از img/ چیه ؟
attr(‘src’, ‘img/’+msg + ‘.png’)
این خط
attr(‘src’, ‘img/’+msg + ‘.png’)
در هنگام اجرای ajax تصویر ساخته شده در فولدر مورد نظر را به جای تصویر فعلی قرار می دهد تا کد کپچای جدید برای کاربر قابل رویت باشد.
ببخشید جناب شفیعی فکر می کنم سورسی که تو دانلود باکس هست فرق داره با اون چیزی که شما می فرمایید.آخه تو این کد های شما اصلا فایلی ایجاد نمیشه منظورم به صورت خارجیه.یا مثلا همین تگ با کلاس capimg که برای رفرش کردن نوشتید اصلا نیست تو کد های قرارداده شده در دانلود باکس.
الان دستور imagepng دو تا پارامتر داره یکی سورس تصویری که می خوایم درست کنیم و پارامتر دوم که میشه آدرس ساخت فایل فیزیکی.
الان تو دستورات شما پارامتر دوم اصلا ذکر نشده.
ممنون میشم راهنمایی کنید.
بله سورس قرار داده شده مطابق همین پست منتشر شده است
ولی نظری که شما ارسال کردید در ابتدا برای پاسخ جداگانه ای بود برای کد ajax ارسال شده برای پاسخ یکی از کاربران به منظور استفاده از ajax برای رفرش عکس است که کاملا متفاوت می باشد.
اگر یک کپچای معمولی بدون ajax می خواهید می توانید همین آموزش و سورس کد را استفاده کنید ولی اگر نیاز به ajax دارید که کلا قضیه متفاوت است و باید بتونید با درک این مورد و کدی که داده شده داخل همین سورس کد یا پروژه خودتون اعمال کنید.
سلام و خسته نباشید.می خواستم بگم که فایا های سورس شما اصلا تگی با کلاس capimg ندارد و من وقتی درخواست رفرش می فرستم. در قسمت src تگ img این چاپ می شود :
h&ŚZ���|�(
��g���I/T�۲Fi$RU��=�iE�O?9�sU�k�ʉ���۴aj��+O#
‘>9�۸�*D:�j/���jkS������C-~��㗣�_�ڂUFf�h�b��j��P�}�[f����IEND�B`�”>ببخشید علتش چیه
سلام. ممنون.
قرار هم نبود این مورد وجود داشته باشه چون در این مطلب و سورس کد مورد نظر حرفی از ajax نشده و فقط به عنوان راهنمایی در پاسخ کامنت دوستان ارسال کردیم.
این محتوایی که برگشت داده شده کد raw تصویر است و برای نمایش تصویر باید هدر نمایش تصویر رو در مرورگر ارسال کنید که به اینصورت باید به ابتدای کد php خودتون که مربوط به تولید تصویر کپچا است اضافه کنید :
header(“Content/text:image/png”);