Проверяй без бэкенда
Токен Caputchin ничего не доказывает, пока что-то его не подтвердит. Обычно это что-то это твой собственный бэкенд, который вызывает /siteverify и решает, доверять ли запросу. Размещённая проверка переносит этот шаг на Caputchin: твоя форма отправляется на пересыльщик Caputchin, Caputchin проверяет токен, отбрасывает всё, что не прошло, и пересылает только проверенные отправки в назначение, которое ты выбираешь.
Это то же решение о доверии, что и серверная проверка, выполняемое на стороне Caputchin вместо твоей. Суть в том, что нет вызова /siteverify, который надо писать, и нет секрета, который надо держать на сервере, потому что сервера нет.
Размещённая проверка это платная функция, доступная на Alpha и выше.
Для кого она
Размещённая проверка существует для случая, когда запускать бэкенд только чтобы проверить токен это больше, чем нужно проекту.
| Ты | Почему она подходит |
|---|---|
| Статический сайт (Webflow, Framer, чистый HTML на CDN) | Нет сервера, чтобы принять форму или вызвать /siteverify. |
| No-code конструктор (Wix, Squarespace, Carrd) | Ты не можешь добавить серверный код проверки. |
| Соло-разработчик или маленькая команда | Контактная форма или форма регистрации не стоит того, чтобы поднимать и эксплуатировать бэкенд ради неё. |
| Уже запускаешь бэкенд, но не для этой формы | Ты можешь направить одну форму на пересыльщик и оставить остаток своего стека в покое. |
Если ты запускаешь бэкенд и хочешь проверять там, используй вместо этого проверь на своём бэкенде. Эти двое альтернативы, а не слои.
Как это работает
Пересыльщик держит отправку в памяти только на тот миг, что нужен для её доставки. Нет хранения между отправкой и доставкой, и поле caputchin-token убирается до того, как нагрузка достигнет твоего назначения.
Назначения
Ты настраиваешь одно или оба на каждый ключ сайта. Включить оба это частый шаблон: слать на вебхук для обработки и слать копию себе на email.
| Назначение | Что ты получаешь |
|---|---|
| Вебхук | JSON-POST, несущий поля твоей формы плюс метаданные проверки Caputchin. |
| Обычное письмо с полями формы и подвалом, отмечающим, что Caputchin проверил отправку. |
Доставки не подписываются. Секретность URL пересыльщика и есть то, что аутентифицирует вызов вебхука, так что держи URL вне публичных репозиториев и клиентского кода. Руководство по настройке показывает точную нагрузку вебхука.
Что держится в тайне
Размещённая проверка следует той же позиции без-данных-о-посетителе, что и остальной Caputchin:
- Отправки никогда не хранятся. Они живут в памяти процесса на время пересылки, затем их нет. Построй собственную запись на стороне вебхука, если хочешь её.
- Никаких данных об отправителе не собирается. Ни IP, ни User-Agent, ни отпечатка, ни отслеживания.
- Телеметрия только сводная. Caputchin считает успехи и сбои доставки, чтобы ты видел, здоровы ли твои назначения, никогда содержимое какой-либо отправки. Смотри статистику.
Как держится в безопасности URL, предоставленный клиентом
URL, который будут вызывать серверы Caputchin, это классический риск подделки запроса на стороне сервера (Server-Side Request Forgery). Пересыльщик отклоняет любой URL вебхука, чей хост это приватный, петлевой, link-local или облачно-метаданный адрес, и когда ты его сохраняешь, и снова прямо перед каждой доставкой. Заблокированные категории включают:
| Категория | Примеры |
|---|---|
| Петлевые и неуказанные | 127.0.0.1, 0.0.0.0, ::1 |
| Приватные (RFC 1918) | 10.x.x.x, от 172.16.x.x до 172.31.x.x, 192.168.x.x |
| Link-local и облачные метаданные | 169.254.x.x, в частности метаданный эндпоинт 169.254.169.254 |
| Carrier-grade NAT | от 100.64.x.x до 100.127.x.x |
| Multicast и зарезервированные | 224.x.x.x и выше |
| Внутренние хостнеймы | localhost и любой хост, заканчивающийся на .local, .localhost или .internal |
| Приватные IPv6 | адреса link-local (fe80::/10) и unique-local (fc00::/7) |
Кодировки, которые пытаются замаскировать заблокированный адрес, тоже ловятся: десятично-целочисленный хост вроде http://2130706433/ или hex-хост вроде http://0x7f000001/ (оба означают 127.0.0.1) отклоняются. Принимаются только URL http и https; любая другая схема отказывается. Пересыльщик также отказывается следовать редиректам, так что эндпоинт вебхука не может отбить вызов на внутреннюю цель. Заблокированный URL всплывает как общая ошибка, а не конкретная, так что его нельзя использовать для зондирования сети. Твой вебхук поэтому должен жить по публичному https-URL.
Что намеренно оставлено за бортом
- Нет входящего ящика отправок. Нет хранимой истории отправок для просмотра в панели.
- Нет собственных адаптеров Discord, Slack, Telegram или SMS. Только вебхук и email. Вебхук может разветвиться на любой из них на твоей стороне.
- Нет загрузки файлов. Пересыльщик принимает текстовые поля; отправка, несущая файл, отклоняется.
- Нет преобразования нагрузки. Что форма отправляет, то твоё назначение и получает, плюс метаданные проверки.
См. также
- Настрой размещённую проверку: прохождение, которое сначала подключает её к тестовому ящику.
- Статистика размещённой проверки: чтение здоровья доставки.
- Проверь на своём бэкенде: альтернатива, когда ты всё же запускаешь сервер.