Обычный сайт (HTML-формы)

Если формы на сайте — обычные <form> с настоящей отправкой (не JS-перехватом) — это буквально 2 строки кода, без бэкенда на фронте:

  1. Зайдите в кабинет um-ko.ru/captcha/cabinet → вкладка «Капча и анти-бот» → «Выдать ключ сайту».
  2. Нажмите «📋 Код для сайта» у выданного ключа — скопируйте сниппет.
  3. Вставьте <script> в <head> вашего сайта, добавьте атрибут data-umko-captcha data-umko-site="ВАШ_КЛЮЧ" на защищаемую форму.
  4. Готово — виджет сам решает Proof-of-Work в браузере и кладёт токен в скрытое поле umko_captcha, форма отправляется как обычно. Боты отсеиваются, обычные посетители капчу не видят вообще.

На своём бэкенде обязательно проверьте токен — виджет только собирает его, отклонить неверный может лишь сервер:

POST https://um-ko.ru/api/captcha.php?action=verify&site=ВАШ_КЛЮЧ
Body: значение поля umko_captcha как есть (JSON-строка)
Ответ: {"ok":true}  или  {"ok":false}

Без этой проверки на своей стороне капча ничего не защищает — виджет только мешает боту, решение проверяете вы сами.

Сайт на React/Vue/Next.js и т.п. (SPA)

Если форма отправляется через fetch/axios с preventDefault() (типичный React/Vue/Next.js сайт) — атрибут data-umko-captcha не сработает: виджет слушает нативное событие submit формы, а не JS-запрос. Нужно вызвать виджет вручную:

  1. Подключите скрипт один раз глобально (например, в корневом layout): <script src="https://um-ko.ru/api/umko-captcha.js" defer></script>.
  2. Перед отправкой формы получите токен: const token = await window.UmkoCaptcha.getToken('ВАШ_КЛЮЧ', 'login') (вторым параметром — контекст: login/register/payment/др., как удобно).
  3. Отправьте его вместе с остальными полями формы как umko_captcha, и на бэкенде проверьте тем же action=verify, что и для обычного сайта.

Важная деталь, на которой мы сами споткнулись (29.07): скрипт виджета — асинхронный, window.UmkoCaptcha появляется примерно через 1-1.5с после загрузки страницы. Если вызвать getToken сразу при монтировании компонента без ожидания — быстрый пользователь (или автозаполнение пароля браузером) может нажать «Отправить» раньше, чем виджет успеет прогрузиться, и получить honest-отказ капчи без своей вины. Дождитесь появления window.UmkoCaptcha (с таймаутом секунд 4-5) перед вызовом getToken, а не проверяйте его наличие один раз мгновенно.

Сервер целиком (не только сайт)

Для полной защиты сервера (WAF, rate-limit, GeoIP, анти-DDoS, fail2ban, CrowdSec) — одна команда самоустановки, показана во вкладке «Комплексная защита» того же кабинета вместе с вашим приватным серверным ключом. Устанавливается за одну команду под root, без вашего участия дальше — сам обновляется и шлёт статус в кабинет.