ساخت سیستم مدیریت CAPTCHA

ساخت سیستم مدیریت CAPTCHA با PHP

ساخت سیستم مدیریت CAPTCHA با PHP

CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) یک سیستم امنیتی است که برای تشخیص اینکه آیا کاربر یک انسان است یا یک ربات، استفاده می‌شود. این سیستم‌ها معمولاً شامل نمایش تصاویر یا صداهایی هستند که انسان‌ها به راحتی می‌توانند آن‌ها را تشخیص دهند، اما برای ربات‌ها دشوار است. در این مقاله، به بررسی نحوه ساخت یک سیستم CAPTCHA ساده اما مؤثر با استفاده از PHP خواهیم پرداخت.

چرا CAPTCHA مهم است؟

در دنیای وب، ربات‌ها می‌توانند برای اهداف مخرب مانند ارسال اسپم، ایجاد حساب‌های کاربری جعلی، انجام حملات brute-force و غیره استفاده شوند. CAPTCHA به عنوان یک لایه امنیتی اضافی عمل می‌کند و از انجام این فعالیت‌ها توسط ربات‌ها جلوگیری می‌کند. این امر به حفظ امنیت وب‌سایت‌ها و محافظت از کاربران آن‌ها کمک می‌کند.

روش‌های مختلف CAPTCHA

روش‌های مختلفی برای پیاده‌سازی CAPTCHA وجود دارد. برخی از رایج‌ترین آن‌ها عبارتند از:

  • CAPTCHA مبتنی بر تصویر: این روش شامل نمایش یک تصویر با متن تحریف‌شده است که کاربر باید آن را بخواند و وارد کند.
  • CAPTCHA مبتنی بر صدا: در این روش، یک فایل صوتی پخش می‌شود که کاربر باید متن موجود در آن را تایپ کند.
  • CAPTCHA مبتنی بر پازل: این روش شامل نمایش یک پازل ساده است که کاربر باید آن را حل کند.
  • reCAPTCHA: یک سرویس CAPTCHA ارائه شده توسط گوگل که از تکنیک‌های پیشرفته برای تشخیص ربات‌ها استفاده می‌کند.

در این مقاله، ما یک CAPTCHA مبتنی بر تصویر ساده را با استفاده از PHP پیاده‌سازی خواهیم کرد.

پیاده‌سازی CAPTCHA با PHP

مرحله ۱: ایجاد تصویر CAPTCHA

برای ایجاد تصویر CAPTCHA، ما از کتابخانه GD در PHP استفاده خواهیم کرد. این کتابخانه به ما امکان می‌دهد تا تصاویر را به صورت پویا ایجاد و ویرایش کنیم.

ابتدا، یک فایل PHP به نام captcha.php ایجاد کنید و کد زیر را در آن قرار دهید:

<?php
session_start();

// تنظیمات CAPTCHA
$width = 150;
$height = 50;
$characters = 'abcdefghijkmnopqrstuvwxyz0123456789';
$character_length = 6;
$font_file = 'arial.ttf'; // مسیر فایل فونت

// ایجاد تصویر
$image = imagecreatetruecolor($width, $height);

// تخصیص رنگ‌ها
$bg_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 0, 0, 0);
$noise_color = imagecolorallocate($image, 192, 192, 192);

// پر کردن پس‌زمینه
imagefill($image, 0, 0, $bg_color);

// ایجاد متن CAPTCHA
$text = '';
for ($i = 0; $i < $character_length; $i++) {
    $text .= $characters[rand(0, strlen($characters) - 1)];
}

// ذخیره متن CAPTCHA در session
$_SESSION['captcha_code'] = $text;

// اضافه کردن نویز
for ($i = 0; $i 

در این کد، ما یک تصویر با ابعاد 150×50 پیکسل ایجاد می‌کنیم. سپس، یک رشته تصادفی از 6 کاراکتر را به عنوان متن CAPTCHA تولید می‌کنیم و آن را در session ذخیره می‌کنیم. در ادامه، نویزهایی به تصویر اضافه می‌کنیم تا تشخیص متن برای ربات‌ها دشوارتر شود. در نهایت، متن CAPTCHA را با استفاده از فونت Arial روی تصویر می‌نویسیم و تصویر را به عنوان یک تصویر PNG ارسال می‌کنیم.

نکته: اطمینان حاصل کنید که فایل فونت arial.ttf در مسیر مشخص شده وجود دارد. در غیر این صورت، باید مسیر فایل فونت را به مسیر صحیح تغییر دهید.

مرحله ۲: ایجاد فرم HTML برای ورود متن CAPTCHA

حالا باید یک فرم HTML ایجاد کنیم که به کاربر امکان می‌دهد متن CAPTCHA را وارد کند.

یک فایل HTML به نام index.php ایجاد کنید و کد زیر را در آن قرار دهید:

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>سیستم CAPTCHA</title>
</head>
<body>

    <form method="post" action="verify.php">
        <label for="captcha_code">متن تصویر را وارد کنید:</label>
        <input type="text" name="captcha_code" id="captcha_code">
        <br>
        <img src="captcha.php" alt="CAPTCHA Image">
        <br>
        <input type="submit" value="ارسال">
    </form>

</body>
</html>

در این کد، یک فرم HTML ایجاد می‌کنیم که شامل یک فیلد متنی برای ورود متن CAPTCHA و یک تصویر برای نمایش تصویر CAPTCHA است. تصویر CAPTCHA از فایل captcha.php بارگیری می‌شود.

مرحله ۳: بررسی صحت متن CAPTCHA

حالا باید یک فایل PHP ایجاد کنیم که صحت متن وارد شده توسط کاربر را بررسی کند.

یک فایل PHP به نام verify.php ایجاد کنید و کد زیر را در آن قرار دهید:


در این کد، ابتدا بررسی می‌کنیم که آیا فرم ارسال شده است. سپس، متن وارد شده توسط کاربر را از متغیر $_POST["captcha_code"] دریافت می‌کنیم و متن CAPTCHA را از session دریافت می‌کنیم. در نهایت، بررسی می‌کنیم که آیا متن وارد شده با متن CAPTCHA مطابقت دارد. اگر مطابقت داشته باشد، یک پیام تبریک نمایش می‌دهیم. در غیر این صورت، یک پیام خطا نمایش می‌دهیم.

بهبود امنیت CAPTCHA

سیستم CAPTCHA که در این مقاله پیاده‌سازی کردیم، یک سیستم ساده است و ممکن است در برابر حملات پیشرفته آسیب‌پذیر باشد. برای بهبود امنیت CAPTCHA، می‌توانید از روش‌های زیر استفاده کنید:

  • استفاده از فونت‌های پیچیده‌تر: استفاده از فونت‌هایی که خواندن آن‌ها برای ربات‌ها دشوارتر است.
  • اضافه کردن خطوط و نقاط تصادفی بیشتر: اضافه کردن نویزهای بیشتر به تصویر CAPTCHA.
  • استفاده از CAPTCHAهای مبتنی بر پازل: استفاده از پازل‌هایی که حل آن‌ها برای ربات‌ها دشوارتر است.
  • استفاده از reCAPTCHA: استفاده از سرویس reCAPTCHA ارائه شده توسط گوگل.

نتیجه‌گیری

در این مقاله، نحوه ساخت یک سیستم CAPTCHA ساده اما مؤثر با استفاده از PHP را بررسی کردیم. CAPTCHA یک ابزار مهم برای محافظت از وب‌سایت‌ها در برابر حملات ربات‌ها است. با استفاده از روش‌های مختلف CAPTCHA و بهبود امنیت آن‌ها، می‌توانید از وب‌سایت خود در برابر فعالیت‌های مخرب محافظت کنید.