ساخت سیستم مدیریت Google reCAPTCHA با PHP
در دنیای امروز، امنیت وبسایتها و جلوگیری از حملات رباتیک از اهمیت ویژهای برخوردار است. یکی از ابزارهای رایج و موثر برای مقابله با این تهدیدات، استفاده از سرویس Google reCAPTCHA است. این سرویس با تشخیص تفاوت بین کاربران انسانی و رباتها، از سوء استفادههای احتمالی جلوگیری میکند. در این مقاله، به بررسی نحوه ساخت یک سیستم مدیریت reCAPTCHA با استفاده از زبان PHP میپردازیم.
مقدمهای بر Google reCAPTCHA
Google reCAPTCHA یک سرویس امنیتی رایگان است که توسط گوگل ارائه میشود. این سرویس از تکنیکهای پیشرفته برای تشخیص کاربران انسانی از رباتها استفاده میکند. reCAPTCHA در دو نسخه اصلی v2 و v3 در دسترس است. نسخه v2 شامل چالشهای تصویری (مانند انتخاب تصاویر) یا چالشهای صوتی است، در حالی که نسخه v3 به صورت نامحسوس در پسزمینه کار میکند و یک امتیاز (score) به هر درخواست اختصاص میدهد. این امتیاز نشاندهنده احتمال انسانی بودن کاربر است.
پیشنیازها
برای پیادهسازی سیستم مدیریت reCAPTCHA با PHP، به موارد زیر نیاز دارید:
- یک حساب کاربری گوگل
- یک وبسایت با دسترسی به PHP
- یک ویرایشگر متن یا IDE
مراحل پیادهسازی
1. ثبتنام و دریافت کلیدهای API
اولین قدم، ثبتنام در سرویس Google reCAPTCHA و دریافت کلیدهای API است. برای این کار، به وبسایت Google reCAPTCHA مراجعه کنید و مراحل ثبتنام را دنبال کنید. در طول فرآیند ثبتنام، باید نام دامنه وبسایت خود را وارد کنید. پس از ثبتنام، دو کلید API دریافت خواهید کرد: یک کلید Site key و یک کلید Secret key. کلید Site key برای نمایش reCAPTCHA در وبسایت شما استفاده میشود و کلید Secret key برای اعتبارسنجی پاسخ reCAPTCHA در سمت سرور استفاده میشود. کلید Secret key را به دقت محافظت کنید و آن را در معرض دید عموم قرار ندهید.
2. افزودن reCAPTCHA به فرم HTML
برای افزودن reCAPTCHA به فرم HTML خود، باید از کد HTML ارائه شده توسط گوگل استفاده کنید. این کد معمولاً به صورت زیر است (برای نسخه v2):
<div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>
به جای YOUR_SITE_KEY، کلید Site key خود را قرار دهید. این کد یک ویجت reCAPTCHA را در فرم شما نمایش میدهد. برای نسخه v3، کد کمی متفاوت است و نیازی به نمایش ویجت نیست. در این نسخه، یک تگ مخفی به فرم اضافه میشود.
<div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY" data-callback="verifyCallback" data-action="submit"></div>
در این کد، verifyCallback نام تابعی است که پس از دریافت پاسخ reCAPTCHA فراخوانی میشود. data-action="submit" مشخص میکند که reCAPTCHA هنگام ارسال فرم فعال شود.
3. اعتبارسنجی پاسخ reCAPTCHA در سمت سرور (PHP)
پس از دریافت پاسخ reCAPTCHA از سمت کاربر، باید آن را در سمت سرور اعتبارسنجی کنید. برای این کار، میتوانید از کتابخانه cURL یا توابع PHP مانند file_get_contents استفاده کنید. در اینجا یک مثال با استفاده از cURL آورده شده است:
<?php
function verifyRecaptcha($secretKey, $response) {
$url = "https://www.google.com/recaptcha/api/siteverify";
$data = array(
'secret' => $secretKey,
'response' => $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);
return $response['success'];
}
// استفاده از تابع
$secretKey = "YOUR_SECRET_KEY";
$response = $_POST['g-recaptcha-response'];
if (verifyRecaptcha($secretKey, $response)) {
// پاسخ reCAPTCHA معتبر است
echo "فرم با موفقیت ارسال شد!";
} else {
// پاسخ reCAPTCHA نامعتبر است
echo "خطا: reCAPTCHA نامعتبر است.";
}
?>
به جای YOUR_SECRET_KEY، کلید Secret key خود را قرار دهید. این کد، پاسخ reCAPTCHA را به API گوگل ارسال میکند و نتیجه را بررسی میکند. اگر پاسخ معتبر باشد، تابع verifyRecaptcha مقدار true را برمیگرداند، در غیر این صورت مقدار false را برمیگرداند.
4. پیادهسازی نسخه v3
در نسخه v3، نیازی به نمایش ویجت reCAPTCHA نیست. شما فقط باید تگ مخفی را به فرم خود اضافه کنید (همانطور که در مرحله 2 توضیح داده شد). سپس، میتوانید امتیاز (score) ارسالی توسط reCAPTCHA را در سمت سرور بررسی کنید. کد PHP برای اعتبارسنجی نسخه v3 مشابه نسخه v2 است، با این تفاوت که شما باید امتیاز را بررسی کنید:
<?php
function verifyRecaptchaV3($secretKey, $response) {
$url = "https://www.google.com/recaptcha/api/siteverify";
$data = array(
'secret' => $secretKey,
'response' => $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']) {
$score = $response['score'];
// تنظیم آستانه امتیاز
$threshold = 0.5;
if ($score >= $threshold) {
return true; // کاربر احتمالا انسانی است
} else {
return false; // کاربر احتمالا ربات است
}
} else {
return false; // خطای اعتبارسنجی
}
}
// استفاده از تابع
$secretKey = "YOUR_SECRET_KEY";
$response = $_POST['g-recaptcha-response'];
if (verifyRecaptchaV3($secretKey, $response)) {
// پاسخ reCAPTCHA معتبر است
echo "فرم با موفقیت ارسال شد!";
} else {
// پاسخ reCAPTCHA نامعتبر است
echo "خطا: reCAPTCHA نامعتبر است.";
}
?>
در این کد، $threshold آستانه امتیازی است که شما تعیین میکنید. اگر امتیاز reCAPTCHA از این آستانه بیشتر باشد، کاربر به عنوان انسانی در نظر گرفته میشود. مقدار آستانه را با توجه به نیازهای امنیتی خود تنظیم کنید.
نکات امنیتی
در هنگام پیادهسازی reCAPTCHA، به نکات امنیتی زیر توجه کنید:
- کلید Secret key را به دقت محافظت کنید و آن را در معرض دید عموم قرار ندهید.
- همیشه پاسخ reCAPTCHA را در سمت سرور اعتبارسنجی کنید.
- از آخرین نسخه reCAPTCHA استفاده کنید.
- آستانه امتیازی (برای نسخه v3) را با توجه به نیازهای امنیتی خود تنظیم کنید.
نتیجهگیری
استفاده از Google reCAPTCHA یک راهکار موثر برای افزایش امنیت وبسایتها و جلوگیری از حملات رباتیک است. با پیادهسازی سیستم مدیریت reCAPTCHA با استفاده از PHP، میتوانید از وبسایت خود در برابر سوء استفادههای احتمالی محافظت کنید. این مقاله، یک راهنمای جامع برای پیادهسازی reCAPTCHA در وبسایتهای PHP ارائه میدهد. با رعایت نکات امنیتی و استفاده از آخرین نسخه reCAPTCHA، میتوانید امنیت وبسایت خود را به طور قابل توجهی افزایش دهید.
