آموزش ساخت Captcha(کد امنیتی) در php
سلام
برای جلوگیری از ارسال بیهوده فرم ها توسط ربات ها نیاز هست تا یک مرحله فرم های امنیتی سایت را حرفه ای تر کنیم و برای اینکار می توانیم به فرم های سایت یک کد امنیتی یا همون Captcha اضافه کنیم، در ادامه همراه بپرسم باشید تا خیلی ساده بتونیم یک کپچای حرفه ای به فرم هامون اضافه کنیم.
Captcha چیست؟
Capctha یا کد امنیتی، راهی هست که ما می توانیم تشخیص دهیم فردی که میخواهد فرم موجود در سایت را ارسال کنید انسان است یا ربات، که با وارد کردن امنیتی و چک کردن این کد در سمت سرور می توانیم متوجه شویم.
تابع ساخت Captcha:
یک تابعی براتون آماده کردم که توسط این تابع خیلی راحت میتونید یک تصویر امنیتی در فرم وب سایت خود اضافه کنید، که کدتابع به صورت زیر است:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ |
function warpedCaptcha($text) { if (۵ > rand(۰, ۶)) return $text; $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]; $ltrs = array_merge($ltrs, $vowels); $text = str_split($text); $captcha = ''; foreach ($text as $txt) $captcha .= $ltrs[$txt]; return $captcha; } $fp = fopen('xsixlw.txt', "r"); $count = filesize('xsixlw.txt') / ۶ - ۱; $pos = ۶ * rand(۰, $count); fseek($fp, $pos); $captcha = warpedCaptcha(trim(fread($fp, ۶))); fclose($fp); session_start(); $_SESSION['captcha'] = $captcha; session_write_close(); $im = imagecreatetruecolor(۲۰۰, ۷۰);//۲۰۰ x 70 pixel image $black = imagecolorallocate($im, ۰, ۰, ۰); imagecolortransparent($im, $black);//give it a black background switch (rand(۰, ۴)) { case ۰: $color = imagecolorallocate($im, ۳۴, ۱۵۵, ۹۱); break; case ۱: $color = imagecolorallocate($im, ۲۳۳, ۲۶, ۷۴); break; case ۲: $color = imagecolorallocate($im, ۲۳۳, ۲۶, ۱۹۵); break; case ۳: $color = imagecolorallocate($im, ۲۴۴, ۱۷۸, ۱۹); break; case ۴: $color = imagecolorallocate($im, ۵۳, ۱۲۵, ۱۹۹); break; } $x = ۲۰; $y = ۴۷; for ($i = ۰; $i < ۶; $i++) { $angle = rand(-۸, ۸) + rand(۰, ۹) / ۱۰; $fontsize = rand(۲۲, ۳۲); $letter = substr($captcha, $i, ۱); $coords = imagettftext($im, $fontsize, $angle, $x, $y, $color, 'Bubble_Letters.ttf', $letter); $x += ($coords[۲] - $x) + ۱; } header('Content-type:image/png'); imagepng($im); imagedestroy($im); |
روش کار تابع بدین صورت هست که اعداد تصادفی را تولید میکند و خروجی به صورت تصویر است، و هر کدی که ساخته می شود در Session ی به نام Captcha ذخیره میشود، که در سمت سرور باید مقدار ارسالی از سمت کاربر را با این Session مقایسه کنیم تا اگر کاربر کد امنیتی را درست وارد کرده بود، اطلاعات ارسال شود.
که در پایان پست می توانید،؛ تابع را به همراه فایل فونت و فایل متنی که برای تولید کد امنیتی می باشد را دانلود کنید.
آموزش:
- پوشه Captcha را پس از دانلود، در کنار فرم خود قرار بدید.
- سپس باید یک تگ img برای نمایش Captcha و یک Input برای وارد کردن کد امینیتی اضافه کنید.
۱ ۲ |
<img height="۷۰" width="۲۰۰" src="captcha/captcha.php"/> <input type="text" name="captcha" placeholder="کد امنیتی را وارد کنید"> |
همانطور که در کد بالا می بینید، درون تگ form یک تصویر قرار دادیم و آدرس فایل Captcha.php را در آدرس بهش دادیم و یک input از نوع Text هم که نام آن را برابر captcha قرار دادیم برای وارد کردن کد امنیتی، قرار دادیم.
- در سمت سرور، قبل از ارسال اطلاعات فرم باید، چک کنیم که آیا کاربر کد امنیتی را درست وارد کرده یا نه، برای این کار ابتدا Session را Start میکنیم(چون کپچا را در سشن ذخیره کردیم و برای اینکه Session را چک کنیم باید Session را Start کنیم).
۱ ۲ ۳ ۴ ۵ ۶ |
session_start(); if ($_SESSION['captcha'] === $_POST['captcha']) { echo 'کد امنیتی صحیح وارد شده است.'; } else { echo 'کد امنیتی اشتباه است'; } |
در خط ۱ ابتدا Session را Start کردیم، سپس در خط ۲ مقدار SESSION[‘capthca’]_$ را با POST[‘capthca’]_$ مقایسه کردیم که اگه کد امنیتی درست وارد شده بود، عبارت: “کد امنیتی صحیح وارد شده است.” و اگر نادرست بود، عبارت: “کد امنیتی اشتباه است” در صفحه چاپ شود و به کاربر نمایش داده شود.
در پایان آموزش، سورس کد به همراه تابع کپچا را میتوانید دانلود کنید.
موفق باشید.
ارسال نظر
شما باید وارد شوید یا عضو شوید تا بتوانید نظر ارسال کنید