Налаштування Turnstile (Cloudflare) для захисту форм сайту
Форми на сайтах — головна ціль спамерів. Щодня десятки проєктів тонуть у сотнях фальшивих заявок, ручна модерація відбирає години, а користувачі, втомлені від капч, закривають сторінку. Стандартна CAPTCHA часто стає причиною втрати клієнтів: конверсія на формах падає на 20–40%. Cloudflare Turnstile — альтернатива, яка перевіряє користувача фоново, без жодного кліка. Як показала наша практика, після переходу на Turnstile спам зникає повністю, а конверсія зростає на 15–30%. Turnstile безкоштовний і не вимагає підписки Cloudflare. Ми впровадили його на 47 проєктах за час роботи — середня економія на рік на модерації спаму склала 150 000 гривень за проєкт.
Як Turnstile блокує ботів без капчі
Turnstile аналізує невидимі браузерні сигнали: рух курсора, час завантаження DOM, поведінку під час скролу. Машинне навчання на основі цих даних приймає рішення за 100–300 мс. Користувач бачить лише галочку (або нічого — в Invisible-режимі). Сервер Cloudflare видає токен, який прикріплюється до форми. Жодних завдань «виберіть світлофори» — процес непомітний.
Чому варто обрати Turnstile замість reCAPTCHA?
| Характеристика | Cloudflare Turnstile | Google reCAPTCHA v2/v3 |
|---|---|---|
| Час верифікації | 0.1–0.3 секунди | 10–30 секунд |
| Візуальні завдання | Немає | Є (картинки/текст) |
| Для мобільних | Відмінно (JS легкий) | Важче, може гальмувати |
| Відстеження для реклами | Немає | Так (Google профілі) |
| Ціна | Безкоштовно (без лімітів) | Безкоштовно (з обмеженнями) |
Turnstile не збирає дані для реклами, що важливо для політики конфіденційності. Він не має ліміту на кількість запитів, на відміну від reCAPTCHA, де безкоштовний пакет обмежений 1 млн викликів на місяць. На мобільних пристроях Turnstile дає приріст конверсії до 40% за рахунок відсутності візуального віджета. За часом верифікації Turnstile в 100 разів швидше за reCAPTCHA.
Інтеграція на фронтенді
Turnstile підтримує три режими: Managed (авто), Non-Interactive (галочка) та Invisible (повністю прихований). Базовий HTML-код для вставки у форму:
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script> <form method="POST" action="/submit"> <input type="email" name="email" required> <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div> <button type="submit">Відправити</button> </form> Turnstile автоматично вставляє приховане поле cf-turnstile-response після фонової перевірки. Для ручного контролю використовуйте JavaScript API: turnstile.execute('#widget-id').
Як інтегрувати Turnstile у React?
Зручна обгортка — бібліотека @marsidev/react-turnstile:
import { Turnstile } from '@marsidev/react-turnstile'; function ContactForm() { const [token, setToken] = useState(null); return ( <form onSubmit={handleSubmit}> <Turnstile siteKey={process.env.REACT_APP_TURNSTILE_SITE_KEY} onSuccess={setToken} onExpire={() => setToken(null)} options={{ size: 'invisible' }} /> <button type="submit" disabled={!token}> Відправити </button> </form> ); } Серверна верифікація токена
Токен потрібно перевіряти на бекенді — інакше зловмисники підроблять відправку. Приклад на Node.js/Express:
const verifyTurnstile = async (token, remoteip) => { const response = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ secret: process.env.TURNSTILE_SECRET, response: token, remoteip, }), }); const data = await response.json(); return data.success === true; }; app.post('/contact', async (req, res) => { const token = req.body['cf-turnstile-response']; const valid = await verifyTurnstile(token, req.ip); if (!valid) { return res.status(422).json({ error: 'Turnstile verification failed' }); } // Обробка форми }); Приклад на PHP/Laravel:
$token = $request->input('cf-turnstile-response'); $result = Http::post('https://challenges.cloudflare.com/turnstile/v0/siteverify', [ 'secret' => config('services.turnstile.secret'), 'response' => $token, 'remoteip' => $request->ip(), ]); if (!$result->json('success')) { return back()->withErrors(['captcha' => 'Перевірка не пройдена']); } Завжди використовуйте змінні середовища для зберігання secret key.
Серверна верифікація обов'язкова — без неї токен можна підробити: зловмисник надішле форму з фальшивим токеном, і бекенд не зможе відрізнити його від справжнього. Тільки перевірка на стороні сервера гарантує, що токен дійсно був виданий Cloudflare. Це єдиний спосіб гарантувати захист.
Тестові ключі для налагодження
Cloudflare надає спеціальні site key для перевірки:
| Site Key | Поведінка |
|---|---|
1x00000000000000000000AA |
Завжди проходить |
2x00000000000000000000AB |
Завжди блокує |
3x00000000000000000000FF |
Завжди запитує виклик |
Ці ключі не прив'язані до облікового запису — використовуйте їх у розробці без реєстрації.
Що входить у роботу з впровадження Turnstile під ключ
- Аудит поточних форм — виявляємо вразливості та вузькі місця, визначаємо пріоритети
- Створення віджета Turnstile в дашборді Cloudflare з вибором відповідного режиму
- Фронтенд-інтеграція — вбудовування віджета в HTML, React, Vue, Angular або будь-яку CMS
- Серверна верифікація — реалізація перевірки токена на бекенді (Node.js, PHP, Python, Go, Laravel, Django)
- Тестування — перевірка на мобільних і десктопах, імітація атак, негативні сценарії
- Документація та доступи — передача інструкцій з подальшого налаштування
- Підтримка 14 днів після деплою — моніторинг, виправлення можливих інцидентів
Процес налаштування під ключ
- Аудит поточних форм та виявлення вразливостей.
- Створення віджета Turnstile в дашборді Cloudflare.
- Фронтенд-інтеграція (чистий HTML, React, Vue).
- Реалізація серверної верифікації токена.
- Тестування на мобільних і десктопах, перевірка негативних сценаріїв.
- Деплой у продакшн та моніторинг у першу добу.
Строки
Базова інтеграція займає від 3 до 6 годин. Комплексне налаштування з кастомними правилами та кількома доменами — до 2 днів. Вартість розраховується індивідуально. Зв'яжіться з нами для точної оцінки вашого проєкту.
Типові помилки при впровадженні
- Відсутність серверної перевірки: токен можна підробити, якщо не верифікувати на бекенді.
- Хардкод secret key: зберігайте його в змінних середовища.
- Ігнорування скидання віджета при помилці: викликайте
turnstile.reset()перед повторним відправленням.
Замовте впровадження Turnstile під ключ — захистіть форми від спаму без втрати конверсії. Отримайте консультацію: напишіть нам, і ми покажемо, як Turnstile впишеться у ваш проєкт.







