ساخت فرم با CAPTCHA

ساخت فرم با CAPTCHA در PHP: راهنمای جامع

ساخت فرم با CAPTCHA در PHP: راهنمای جامع

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

مقدمه‌ای بر CAPTCHA و انواع آن

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

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

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

پیاده‌سازی CAPTCHA متنی ساده در PHP

برای پیاده‌سازی CAPTCHA متنی ساده، مراحل زیر را دنبال کنید:

  1. ایجاد تصویر CAPTCHA: یک تصویر با متن تصادفی ایجاد کنید. این متن باید به گونه‌ای باشد که برای انسان قابل خواندن باشد، اما برای ربات‌ها دشوار باشد. می‌توانید از توابع PHP مانند imagestring() و imagecreate() برای ایجاد تصویر و نوشتن متن روی آن استفاده کنید.
  2. ذخیره متن CAPTCHA در Session: متن تولید شده را در Session ذخیره کنید تا بتوانید آن را با ورودی کاربر مقایسه کنید.
  3. نمایش تصویر CAPTCHA در فرم: تصویر CAPTCHA را در فرم HTML نمایش دهید.
  4. دریافت ورودی کاربر: ورودی کاربر را از فرم HTML دریافت کنید.
  5. مقایسه ورودی کاربر با متن CAPTCHA: ورودی کاربر را با متن CAPTCHA ذخیره شده در Session مقایسه کنید. اگر مطابقت داشته باشد، فرم معتبر است.

مثال کد PHP برای ایجاد تصویر CAPTCHA


مثال کد HTML برای نمایش فرم و تصویر CAPTCHA

<form action="process_form.php" method="post">
    <label for="name">نام:</label>
    <input type="text" id="name" name="name" required><br>

    <label for="email">ایمیل:</label>
    <input type="email" id="email" name="email" required><br>

    <label for="captcha">CAPTCHA:</label>
    <img src="captcha.php" alt="CAPTCHA Image">
    <input type="text" id="captcha" name="captcha" required><br>

    <input type="submit" value="ارسال">
</form>

مثال کد PHP برای پردازش فرم و اعتبارسنجی CAPTCHA


استفاده از reCAPTCHA در PHP

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

  1. ثبت نام در reCAPTCHA: در وب‌سایت reCAPTCHA (https://www.google.com/recaptcha/intro/) ثبت نام کنید و کلیدهای Site key و Secret key را دریافت کنید.
  2. اضافه کردن کد HTML reCAPTCHA به فرم: کد HTML ارائه شده توسط reCAPTCHA را به فرم HTML خود اضافه کنید.
  3. اعتبارسنجی پاسخ reCAPTCHA در PHP: از API reCAPTCHA برای اعتبارسنجی پاسخ کاربر استفاده کنید.

مثال کد HTML برای اضافه کردن reCAPTCHA به فرم

<form action="process_form.php" method="post">
    <label for="name">نام:</label>
    <input type="text" id="name" name="name" required><br>

    <label for="email">ایمیل:</label>
    <input type="email" id="email" name="email" required><br>

    <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>

    <input type="submit" value="ارسال">
</form>

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

توجه: به جای YOUR_SITE_KEY، کلید Site key خود را وارد کنید.

مثال کد PHP برای اعتبارسنجی پاسخ reCAPTCHA

 'YOUR_SECRET_KEY',
        'response' => $captcha_response
    );

    $options = array(
        'http' => array(
            'header'  => "Content-type: application/x-www-form-urlencodedrn",
            'method'  => 'POST',
            'content' => http_build_query($data)
        )
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    $response = json_decode($result, true);

    if ($response['success']) {
        // فرم معتبر است
        echo "فرم با موفقیت ارسال شد!";
    } else {
        // CAPTCHA نامعتبر است
        echo "CAPTCHA نامعتبر است. لطفا دوباره تلاش کنید.";
    }
}
?>

توجه: به جای YOUR_SECRET_KEY، کلید Secret key خود را وارد کنید.

نکات امنیتی مهم

  • استفاده از HTTPS: همیشه از HTTPS برای رمزگذاری ارتباط بین کاربر و سرور استفاده کنید.
  • اعتبارسنجی ورودی کاربر: تمام ورودی‌های کاربر را قبل از استفاده از آن‌ها اعتبارسنجی کنید تا از حملات تزریق کد جلوگیری کنید.
  • محدود کردن تعداد تلاش‌ها: تعداد تلاش‌های ناموفق برای ارسال فرم را محدود کنید تا از حملات brute-force جلوگیری کنید.
  • به‌روزرسانی CAPTCHA: CAPTCHA خود را به‌طور منظم به‌روزرسانی کنید تا از دور زدن آن توسط ربات‌ها جلوگیری کنید.
  • استفاده از reCAPTCHA: در صورت امکان، از reCAPTCHA استفاده کنید، زیرا امنیت بالاتری نسبت به CAPTCHAهای متنی ساده دارد.

نتیجه‌گیری

ساخت فرم با CAPTCHA یک گام مهم در حفظ امنیت وب‌سایت شما است. با استفاده از روش‌های ارائه شده در این مقاله، می‌توانید از ارسال فرم‌های خودکار توسط ربات‌ها جلوگیری کنید و از اطلاعات کاربران خود محافظت کنید. انتخاب بین CAPTCHA متنی ساده و reCAPTCHA بستگی به نیازها و سطح امنیت مورد نظر شما دارد. با رعایت نکات امنیتی ذکر شده، می‌توانید اطمینان حاصل کنید که فرم‌های شما در برابر حملات امنیتی محافظت می‌شوند.