Переход с Cloudflare Turnstile на dCAPTCHA не занимает много времени. Вам понадобится изменить только названия параметров и вызовов API (если они используются), сам механизм проверки запроса остается таким же.
Предварительные условия:
- Услуга dCAPTCHA подключена в личном кабинете DDoS-Guard
- Создан и включен ключ CAPTCHA
- Домен добавлен в список доменов ключа CAPTCHA
Изменения на сайте
Замена скрипта
На каждой странице, где планируется заменить Turnstile на dCAPTCHA, найдите и измените тег скрипта.
До:
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>После:
<script src="https://captcha.ddos-guard.net/static/api.js" defer></script>Если вы использовали явный рендер (explicit rendering) через turnstile, измените эти вызовы на вызовы API ddgcaptcha. Подробнее о настройке explicit rendering
Замена виджета в форме
Обновите контейнер в каждой форме, в которой используется капча: замените название класса (cf-turnstile → ddg-captcha-container) и Site key.
До:
<form action="/login" method="POST">
<!-- прочие поля -->
<div class="cf-turnstile" data-sitekey="1x00000000000000000000AA"></div>
<button type="submit">Войти</button>
</form>После:
<form action="/login" method="POST">
<!-- прочие поля -->
<div class="ddg-captcha-container" data-sitekey="ваш_sitekey"></div>
<button type="submit">Войти</button>
</form>
Другие изменения в код:
- Удалите атрибуты Turnstile:
data-theme,data-size,data-appearance,data-execution,data-action,data-cdata,data-error-callback,data-expired-callback. Подробнее о кастомизации виджета dCAPTCHA - Замените все обращения к
cf-turnstile-responseнаddg-captcha-token - Удалите из
<head>страницы ссылку preconnect (<link rel="preconnect" href="https://challenges.cloudflare.com">) - Замените все вызовы API
turnstileнаddgcaptcha. Соответствие вызовов API
Изменения на бэкенде
Отредактируйте вызов проверки Turnstile, заменив
- эндпоинт для проверки токена —
https://challenges.cloudflare.com/turnstile/v0/siteverify→https://captcha.ddos-guard.net/siteverify - имя параметра секрета (
secret→private_key) и сам секретный ключ - формат данных в запросе на
json
До:
import requests
import os
SECRET_KEY = os.environ['TURNSTILE_SECRET_KEY']
def verify_turnstile(token):
response = requests.post(
'https://challenges.cloudflare.com/turnstile/v0/siteverify',
data={'secret': SECRET_KEY, 'response': token},
)
return response.json()После:
import requests
import os
PRIVATE_KEY = os.environ['DDG_CAPTCHA_PRIVATE_KEY']
def verify_ddg_captcha(token):
response = requests.post(
'https://captcha.ddos-guard.net/siteverify',
json={'private_key': PRIVATE_KEY, 'response': token},
)
return response.json()Если на сайте используется Content-Security-Policy, замените challenges.cloudflare.com на captcha.ddos-guard.net в директивах script-src, frame-src и connect-src.
Подробнее о проверке dCAPTCHA на сервере
Соответствие параметров и вызовов API
| Компонент | Cloudflare Turnstile | dCAPTCHA |
|---|---|---|
| Скрипт | https://challenges.cloudflare.com/turnstile/v0/api.js | https://captcha.ddos-guard.net/static/api.js |
| Класс контейнера виджета | cf-turnstile | ddg-captcha-container |
| Поле с токеном | cf-turnstile-response | ddg-captcha-token |
| Эндпоинт для проверки токена | https://challenges.cloudflare.com/turnstile/v0/siteverify | https://captcha.ddos-guard.net/siteverify |
| Секрет | secret (form-urlencoded или JSON) | private_key (только JSON) |
API
| Cloudflare Turnstile | dCAPTCHA |
|---|---|
turnstile.render() | ddgcaptcha.render() |
turnstile.reset() | ddgcaptcha.reset() |
turnstile.getResponse() | ddgcaptcha.getResponse() |
turnstile.execute() | — используйте reset() для начала новой проверки |
turnstile.remove() | — |