Переход на dCAPTCHA с Cloudflare Turnstile

Переход с 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-turnstileddg-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, заменив

  1. эндпоинт для проверки токена — https://challenges.cloudflare.com/turnstile/v0/siteverifyhttps://captcha.ddos-guard.net/siteverify
  2. имя параметра секрета (secretprivate_key) и сам секретный ключ
  3. формат данных в запросе на 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 на сервере

 

КомпонентCloudflare TurnstiledCAPTCHA
Скриптhttps://challenges.cloudflare.com/turnstile/v0/api.jshttps://captcha.ddos-guard.net/static/api.js
Класс контейнера виджетаcf-turnstileddg-captcha-container
Поле с токеномcf-turnstile-responseddg-captcha-token
Эндпоинт для проверки токенаhttps://challenges.cloudflare.com/turnstile/v0/siteverifyhttps://captcha.ddos-guard.net/siteverify
Секретsecret (form-urlencoded или JSON)private_key (только JSON)

API

Cloudflare TurnstiledCAPTCHA
turnstile.render()ddgcaptcha.render()
turnstile.reset()ddgcaptcha.reset()
turnstile.getResponse()ddgcaptcha.getResponse()
turnstile.execute()— 
 используйте reset() для начала новой проверки
turnstile.remove()