Разработка формы с reCAPTCHA/hCaptcha защитой
CAPTCHA-защита форм предотвращает спам-отправки, регистрации ботов и брутфорс паролей. Выбор между Google reCAPTCHA и hCaptcha зависит от требований к конфиденциальности и географии аудитории.
reCAPTCHA v3 (рекомендуется)
v3 работает незаметно: анализирует поведение пользователя и возвращает score от 0.0 до 1.0 без показа задач.
<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>
async function submitForm(data: FormData) {
const token = await grecaptcha.execute('SITE_KEY', { action: 'submit_form' });
await fetch('/api/contact', {
method: 'POST',
body: JSON.stringify({ ...data, recaptcha_token: token }),
});
}
// Верификация на сервере
class RecaptchaService
{
public function verify(string $token, string $expectedAction = 'submit_form'): bool
{
$resp = Http::post('https://www.google.com/recaptcha/api/siteverify', [
'secret' => config('services.recaptcha.secret'),
'response' => $token,
'remoteip' => request()->ip(),
]);
$result = $resp->json();
return $result['success'] === true
&& $result['action'] === $expectedAction
&& $result['score'] >= 0.5; // порог: 0.0 = бот, 1.0 = человек
}
}
hCaptcha (альтернатива)
hCaptcha совместима с reCAPTCHA v2 API, но ориентирована на приватность. Предпочтительна если аудитория в регионах с ограничениями Google:
<script src="https://js.hcaptcha.com/1/api.js" async defer></script>
<div class="h-captcha" data-sitekey="SITE_KEY"></div>
$resp = Http::post('https://hcaptcha.com/siteverify', [
'secret' => config('services.hcaptcha.secret'),
'response' => $request->h_captcha_response,
]);
$valid = $resp->json('success') === true;
Cloudflare Turnstile (самый незаметный)
Самая ненавязчивая защита — только чекбокс или полностью невидимая:
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<div class="cf-turnstile" data-sitekey="SITE_KEY"></div>
Верификация идёт на https://challenges.cloudflare.com/turnstile/v0/siteverify.
Время реализации: 1 рабочий день.







