Спам в формах: своя капча Cap вместо reCAPTCHA
Cap это открытая капча под Apache 2.0, которая работает на вашем сервере: браузер сам решает небольшую вычислительную задачу, картинок нет. Разбираем, как её подключают к форме заявок, что с 152-ФЗ и где она не защитит.
Форма заявок, в которой мусора больше, чем клиентов
Знакомая картина на сайте компании. Форма отправляет заявки в Telegram или на почту, а среди них «продвижение сайта недорого», ссылки на казино и пустые сообщения с одним адресом. Менеджер каждое утро разбирает, где живой человек, а настоящая заявка иногда тонет в куче и получает ответ на следующий день.
Стандартное лекарство называется reCAPTCHA. Её скрипт грузится с серверов Google, поэтому браузер каждого посетителя обращается к чужой инфраструктуре. Версия с картинками раздражает людей, а работа формы зависит от того, достучится ли браузер до внешнего сервиса.
Есть вариант проще: капча, которая живёт на вашем сервере. Один из заметных открытых проектов такого рода называется Cap, репозиторий tiagozip/cap на GitHub. Названий «Cap» много, нужен именно этот, с описанием про PoW и instrumentation challenges.
Как устроен Cap и как он подключается
На момент проверки, 4 октября 2026 года, у репозитория около 7,9 тысячи звёзд, последнее обновление кода 3 октября. Лицензия Apache 2.0: так написано в README, в файле LICENSE и в пакетах npm. Виджет @cap.js/widget имеет версию 0.1.58 от 23 сентября, сервер @cap.js/server версию 4.0.5. В README сказано, что Cap работает в продакшене у bunny.net и AdGuard, это слова авторов.
Защита строится на двух вещах. Первая называется proof-of-work: браузер посетителя в фоне решает несколько небольших вычислительных задач, рассчитанных на плохое ускорение видеокартами. Человек этого не замечает, а тому, кто шлёт тысячи заявок в минуту, каждая отправка стоит процессорного времени. Вторая это инструментальные задачи (instrumentation): проверка окружения браузера, которая отсеивает простые скрипты и безголовые браузеры. Авторы пишут, что её можно настроить и против автономных ИИ-агентов.
Подключение состоит из трёх частей:
- На страницу добавляется скрипт виджета и тег
cap-widgetс адресом вашего сервера. - Если тег стоит внутри формы, виджет сам добавляет скрытое поле
cap-token. Имя поля меняется атрибутом. - Ваш бэкенд перед обработкой заявки отправляет токен и секретный ключ на адрес
/siteverify. Ответsuccess: trueзначит, что проверка пройдена. Токен одноразовый, формат запроса совместим с reCAPTCHA.
Сервер Cap поднимается через Docker Compose вместе с хранилищем Valkey (форк Redis). Для WordPress готовых вариантов от самих авторов я не нашёл, но есть плагины сообщества, например «Privacy CAPTCHA for Cap» в каталоге wordpress.org. Это сторонняя разработка, её надо проверять отдельно.
Приватность и 152-ФЗ
По README и документации Cap не использует cookies и не обращается к сторонним сервисам, проверка идёт на вашей инфраструктуре. У виджета есть одна тонкость: в примере скрипт подключается с CDN jsDelivr. Чтобы браузер посетителя не ходил к чужим серверам, файл виджета кладут к себе на сайт.
Теперь про закон. Статья 12 закона 152-ФЗ требует, чтобы оператор до начала трансграничной передачи персональных данных уведомил Роскомнадзор. Часть 5 статьи 18 касается записи и хранения данных граждан России в базах на территории РФ. Что закон требует на самом деле, разобрано в статье про мифы о 152-ФЗ.
Утверждать, что reCAPTCHA нарушает закон, я не буду: это зависит от того, какие данные и как попадают к стороннему сервису, и вопрос для юриста. Если капча стоит на вашем сервере и ничего не отправляет третьим лицам, о трансграничной передаче с её стороны думать не приходится. Текст закона я смотрел в пересказах, на consultant.ru страница статьи не открылась, поэтому сверьтесь с актуальной редакцией.
Где Cap не сработает
Proof-of-work останавливает массовую рассылку: когда каждая отправка стоит машинного времени, спамеру невыгодно слать десятки тысяч сообщений. Целевого человека, который решил завалить именно вас, это не остановит. Он заплатит за вычисления и обойдёт защиту. Сами авторы в таблице сравнения ставят Cap в графе «сложно для ботов» лишь частично зелёным, а hCaptcha описывают как более стойкую к ботам, но с потерей части посетителей на картинках.
Ещё несколько ограничений:
- Версия виджета 0.1.x, проект молодой. После обновлений проверяйте форму.
- Русский язык. Надписи виджета задаются атрибутами
data-cap-i18n-*, так что по-русски они выглядят как надо. Готового русского перевода «из коробки» в документации я не нашёл. - Доступность. В документации сказано, что вычислительная проверка обходит барьеры картинок и аудио по WCAG 2.2, и есть атрибуты aria-label. С экранным диктором я виджет не проверял.
- Tilda и другие конструкторы. Подтверждённого способа вставить серверную проверку токена я не нашёл. Проверка нужна именно на сервере, одной вставки виджета в страницу недостаточно.
- Сервер нужно обновлять и следить за ним, иначе формы перестанут принимать заявки.
Если держать сервер не хочется, есть российская альтернатива: Яндекс SmartCaptcha. Это сервис Yandex Cloud с виджетом и серверной проверкой, есть режим невидимой капчи, который показывает проверку только подозрительным запросам. Условия оплаты задаёт Яндекс.
Что можно сделать уже сейчас
Первое: выясните, откуда спам. Откройте последние заявки и отметьте, сколько из них пустые или со ссылками. Если спам однотипный, иногда хватает скрытого поля, которое человек не видит, а бот заполняет. Базовый набор защиты описан в статье про защиту сайта от ботов.
Второе: проверьте, что у формы есть серверная проверка. Капча, которую проверяют только в браузере, обходится прямым запросом к форме.
Третье: поднимите Cap на тестовом поддомене и посмотрите, как он ведёт себя на телефонах и слабых устройствах. Задачи считаются на устройстве посетителя, сложность настраивают так, чтобы ожидание было секундой-другой.
Четвёртое: добавьте защиту в общий список проверок. Защиту форм стоит держать в чек-листе безопасности сайта. Мы подключаем Cap к вашим формам и настраиваем под ключ: сервер, виджет на ваших страницах, серверная проверка, перевод надписей. Это входит в разработку и доработку сайтов.
Частые вопросы
Cap действительно бесплатный?
Код открыт под Apache 2.0, лицензию платить не надо. Платить придётся за сервер, на котором он работает, и за время на подключение и поддержку.
Можно ли заменить reCAPTCHA без переделки формы?
Серверная проверка Cap совместима по формату с reCAPTCHA, поэтому обычно меняются скрипт на странице, адрес проверки и ключи. Точнее скажу, посмотрев код формы.
Защитит ли Cap от целенаправленной атаки?
Нет. Он поднимает цену для массового спама, но человек с бюджетом на вычисления обойдёт его. Для рискованных сайтов к капче добавляют ограничение частоты запросов и мониторинг.
Коротко о главном
Cap даёт форме заявок защиту от массового спама без картинок и без обращений к сервисам Google. Лицензия Apache 2.0, проект активный, проверка идёт на вашем сервере. Против того, кто целится именно в вас, его не хватит, и сервер придётся обслуживать.
Спам в заявках съедает время менеджеров, и хочется разгрузить форму? Напишите мне в Telegram слово «КАПЧА». Посмотрим вашу форму, решим, нужен ли Cap, SmartCaptcha или хватит простой ловушки, и подключим.
Ещё open-source для бизнеса
Эта статья — часть каталога бесплатных решений, которые я разворачиваю на вашем сервере под ключ: CRM, аналитика, документы, почта, безопасность, магазины, AI.
Что я делаю для бизнеса
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Бесплатно: чек-лист «Готов ли ваш бизнес к 152-ФЗ»
12 пунктов, которые проверяют готовность за час: данные, согласия, уведомление в РКН, локализация, защита. Отметьте, что уже сделано, и увидите дыры, за которые сейчас штрафуют.
Готовы обсудить вашу задачу?
Бесплатная консультация — разберём, как внедрить это в вашем бизнесе под ключ. Без форм, пишите напрямую.
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


