ساخت فرم با Google reCAPTCHA

ساخت فرم با Google reCAPTCHA در PHP

ساخت فرم با Google reCAPTCHA در PHP

در دنیای امروز، امنیت فرم‌های وب یکی از دغدغه‌های اصلی توسعه‌دهندگان است. ربات‌ها و حملات خودکار می‌توانند به راحتی فرم‌ها را اسپم کرده و یا اطلاعات حساس را به سرقت ببرند. Google reCAPTCHA یک سرویس رایگان است که به شما کمک می‌کند تا از فرم‌های خود در برابر این تهدیدات محافظت کنید. این مقاله به شما نحوه پیاده‌سازی reCAPTCHA در فرم‌های PHP را آموزش می‌دهد.

مقدمه‌ای بر Google reCAPTCHA

reCAPTCHA در ابتدا به عنوان یک تست ساده برای تشخیص انسان از ربات طراحی شده بود. کاربران باید تصاویر دارای حروف و اعداد را شناسایی می‌کردند. اما با پیشرفت تکنولوژی، ربات‌ها نیز در حل این تست‌ها ماهر شدند. به همین دلیل، Google نسخه‌های جدیدی از reCAPTCHA را معرفی کرد که از روش‌های پیچیده‌تری برای تشخیص انسان استفاده می‌کنند.

در حال حاضر، دو نسخه اصلی از reCAPTCHA وجود دارد:

  • reCAPTCHA v2: این نسخه شامل یک چالش “من ربات نیستم” است که کاربران باید آن را تیک بزنند. در برخی موارد، reCAPTCHA v2 ممکن است از کاربران بخواهد تصاویر را شناسایی کنند.
  • reCAPTCHA v3: این نسخه به طور نامحسوس در پس‌زمینه کار می‌کند و به جای نمایش یک چالش به کاربر، یک امتیاز (score) را بر اساس رفتار کاربر محاسبه می‌کند. این امتیاز نشان می‌دهد که احتمال انسان بودن کاربر چقدر است.

در این مقاله، ما از reCAPTCHA v3 استفاده خواهیم کرد، زیرا تجربه کاربری بهتری را ارائه می‌دهد و به طور موثرتری از فرم‌ها در برابر ربات‌ها محافظت می‌کند.

مراحل پیاده‌سازی reCAPTCHA v3 در PHP

برای پیاده‌سازی reCAPTCHA v3 در فرم‌های PHP، مراحل زیر را دنبال کنید:

1. ثبت نام در Google reCAPTCHA

ابتدا باید در وب‌سایت Google reCAPTCHA ثبت نام کنید و یک کلید سایت (site key) و یک کلید مخفی (secret key) دریافت کنید. برای این کار، به https://www.google.com/recaptcha/admin مراجعه کنید.

در این صفحه، نام وب‌سایت خود را وارد کنید و reCAPTCHA v3 را انتخاب کنید. سپس، دامنه‌هایی را که می‌خواهید reCAPTCHA در آن‌ها فعال باشد، مشخص کنید. در نهایت، کلید سایت و کلید مخفی خود را دریافت خواهید کرد.

2. افزودن کد reCAPTCHA به فرم HTML

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

کد HTML زیر را در فرم خود قرار دهید:

<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، کلید سایت خود را که از Google reCAPTCHA دریافت کرده‌اید، قرار دهید.

3. پردازش فرم در PHP

در فایل PHP که فرم را پردازش می‌کند (در مثال بالا، process_form.php)، باید اعتبار reCAPTCHA را بررسی کنید. برای این کار، باید کلید مخفی خود را به Google ارسال کنید و امتیاز کاربر را دریافت کنید.

کد PHP زیر را در فایل process_form.php قرار دهید:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_POST["name"];
    $email = $_POST["email"];
    $recaptcha_response = $_POST["g-recaptcha-response"];

    // Verify the reCAPTCHA response
    $url = "https://www.google.com/recaptcha/api/siteverify";
    $data = array(
        'secret' => 'YOUR_SECRET_KEY',
        'response' => $recaptcha_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'] == true) {
        // Form is valid, process the data
        echo "فرم با موفقیت ارسال شد!";
        // Add your code to process the form data here
    } else {
        // Form is invalid, display an error message
        echo "خطا: reCAPTCHA نامعتبر است.";
    }
}
?>

نکته: به جای YOUR_SECRET_KEY، کلید مخفی خود را که از Google reCAPTCHA دریافت کرده‌اید، قرار دهید.

توضیح کد PHP

در کد PHP بالا، ابتدا داده‌های فرم را دریافت می‌کنیم. سپس، با استفاده از API Google reCAPTCHA، اعتبار reCAPTCHA را بررسی می‌کنیم. برای این کار، یک درخواست POST به URL https://www.google.com/recaptcha/api/siteverify ارسال می‌کنیم. در این درخواست، کلید مخفی و پاسخ reCAPTCHA را ارسال می‌کنیم.

Google reCAPTCHA یک پاسخ JSON را برمی‌گرداند که شامل یک فیلد success است. اگر مقدار این فیلد true باشد، به این معنی است که reCAPTCHA معتبر است و فرم می‌تواند پردازش شود. در غیر این صورت، reCAPTCHA نامعتبر است و باید یک پیام خطا به کاربر نمایش داده شود.

تنظیمات پیشرفته reCAPTCHA v3

reCAPTCHA v3 تنظیمات پیشرفته‌ای را ارائه می‌دهد که به شما امکان می‌دهد تا حساسیت reCAPTCHA را تنظیم کنید. شما می‌توانید یک آستانه (threshold) را مشخص کنید که نشان می‌دهد چه امتیازی برای اعتبار reCAPTCHA کافی است. به طور پیش‌فرض، آستانه 0.5 است. این بدان معناست که اگر امتیاز کاربر بیشتر از 0.5 باشد، reCAPTCHA معتبر در نظر گرفته می‌شود.

برای تنظیم آستانه، می‌توانید پارامتر threshold را به درخواست API Google reCAPTCHA اضافه کنید. به عنوان مثال:

$data = array(
    'secret' => 'YOUR_SECRET_KEY',
    'response' => $recaptcha_response,
    'threshold' => 0.7
);

با تنظیم آستانه به 0.7، فقط کاربرانی که امتیاز آن‌ها بیشتر از 0.7 باشد، به عنوان انسان معتبر در نظر گرفته می‌شوند.

نکات امنیتی

در حالی که reCAPTCHA یک ابزار قدرتمند برای محافظت از فرم‌های شما است، اما نباید به آن به عنوان تنها راه حل امنیتی تکیه کنید. همیشه باید از سایر روش‌های امنیتی نیز استفاده کنید، مانند:

  • اعتبارسنجی داده‌ها: اطمینان حاصل کنید که داده‌های ورودی کاربر معتبر هستند و با فرمت مورد انتظار مطابقت دارند.
  • رمزنگاری داده‌ها: اطلاعات حساس را رمزنگاری کنید تا از دسترسی غیرمجاز به آن‌ها جلوگیری کنید.
  • محافظت در برابر حملات SQL Injection و XSS: از تکنیک‌های مناسب برای جلوگیری از این حملات استفاده کنید.

نتیجه‌گیری

Google reCAPTCHA یک ابزار قدرتمند و رایگان است که به شما کمک می‌کند تا از فرم‌های خود در برابر ربات‌ها و حملات خودکار محافظت کنید. با پیاده‌سازی reCAPTCHA در فرم‌های PHP خود، می‌توانید امنیت وب‌سایت خود را به طور قابل توجهی افزایش دهید. با این حال، به یاد داشته باشید که reCAPTCHA تنها یک بخش از یک استراتژی امنیتی جامع است و باید از سایر روش‌های امنیتی نیز استفاده کنید.