Caputchin
Руководства по интеграции

Серверная интеграция

Виджет вручает браузеру одноразовый токен. Этот токен ничего не доказывает, пока твой сервер не подтвердит его через Caputchin. Это шаг, который превращает видимое испытание в настоящую защиту, и это единственный HTTPS-вызов.

Тебе нужен бэкенд, способный сделать исходящий запрос, и секрет твоего ключа сайта (cpt_sec_...), доступный там, никогда в браузере.

1. Прочитай токен

Когда форма отправляется, твой обработчик получает одно дополнительное поле рядом с твоими собственными: caputchin-token. Виджет вставил его в форму, когда посетитель прошёл испытание.

2. Подтверди через /siteverify

Отправь POST с токеном и своим секретом. Запрос и ответ по форме как siteverify у reCAPTCHA, так что существующая интеграция переносится с малыми изменениями:

POST https://caputchin.com/api/v1/siteverify
Content-Type: application/json

{ "secret": "cpt_sec_...", "response": "<caputchin-token>" }
// Node 18+
const verdict = await fetch("https://caputchin.com/api/v1/siteverify", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    secret: process.env.CAPUTCHIN_SECRET,
    response: token,
  }),
}).then((r) => r.json());

if (!verdict.success) {
  // reject the submission
}

Тот же вызов на других языках смотри в примерах бэкенд-интеграции.

3. Прочитай ответ

{
  "success": true,
  "error-codes": [],
  "platform": { "game_id": "caputchin/games/leaf-memory", "score": 847, "duration_ms": 4200 }
}
  • success это единственное, на чём ты ветвишься. true означает, что настоящий посетитель прошёл испытание; доверяй запросу. false означает, отбрось его.
  • error-codes появляется, когда success равно false, и называет, что пошло не так (отсутствующий, просроченный или уже использованный токен и так далее).
  • platform это заявленные клиентом метаданные (какая игра, счёт, длительность). Поле nullable и не является сигналом безопасности. Записывай его для аналитики, если хочешь, но никогда не привязывай доверие к счёту.

Правила, которые тебя защищают

  • Одноразовость. Токен проверяется один раз. Отправка того же снова возвращает success: false, так что тебе не нужно самому отслеживать реплеи.
  • Короткоживущий. Токен истекает через десять минут после выдачи, так что проверяй его во время обработки отправки, а не в отложенном задании.
  • Секрет остаётся на сервере. Он никогда не идёт в браузер, и именно он аутентифицирует вызов.

Частые ошибки

  • Проверка на клиенте. Событие pass и наличие токена это только UX. Каждое решение о доверии происходит здесь, на сервере, с твоим секретом.
  • Привязка к score. Это метаданные, а не значение доверия.

См. также

На этой странице