---
title: "Как остановить регистрации ботов на сайте | Emvero"
description: "Защита регистрации от ботов по шагам: серверные ограничения, токены визита, подтверждение email, безопасные повторы и проверка неполных запросов."
url: https://emvero.io/ru/guides/stop-bot-registrations/
language: ru
updated: 2026-10-30
---

# Как остановить регистрации ботов на сайте

Применяйте ограничения на сервере, проверяйте email и визит отправителя формы и определяйте, когда новый аккаунт получает доступ. Ни одна отдельная проверка не устанавливает, что посетитель — человек.

## Начните с точки создания аккаунта

Скрипт может обратиться прямо к endpoint регистрации, не открывая форму. Защитите этот endpoint и выдаваемый доступ, включая бесплатные кредиты, сообщения и ресурсы пробного периода.

1. Примените ограничения на сервере до создания аккаунта или выдачи ресурса. Браузерная валидация помогает исправить ввод, но ее можно обойти.
2. Начните сбор визита при показе формы, после необходимого согласия. Передайте токен с отправленной формой.
3. Проверьте с сервера email, токен и данные запроса, которые получил сервер.
4. Примените полученное действие. Приложение отправляет подтверждение и не выдает доступ, который от него зависит.
5. Проверьте обычные и неполные отправки, затем наблюдайте за созданием аккаунтов и расходом пробных ресурсов.

## Какое решение применить к регистрации

Это правила объединения результатов, а не оценка вероятности бота. На совмещенном endpoint читайте внешнее действие: отдельный результат email может не учесть сигнал, требующий подтверждения.

| Что вернула проверка | `action` | Что делать здесь |
| --- | --- | --- |
| Действие email: reject | `reject` | Остановите попытку и объясните проблему с адресом. Сигналы не могут смягчить отказ по email. |
| Действие email: требуется подтверждение | `allow_with_email_confirmation` | Не выдавайте доступ до подтверждения ящика. Это относится и к ожидаемому, и к неизвестному результату email: ни один из них не устанавливает, что адрес некорректен. |
| Email разрешает, сигнал повышает действие | `allow_with_email_confirmation` | Потребуйте подтверждения ящика. Причиной может быть отсутствующий, просроченный или повторный токен; это не доказывает злоупотребление. |
| Email разрешает, сигналы не повышают действие | `allow` | Продолжите по правилам приложения. Сюда относится и недоступность сервиса сигналов: решение email сохраняется, но завершенной оценки визита нет. |

## Примените ограничения на сервере

Оставьте проверку формата в форме для быстрой обратной связи, затем повторите валидацию на сервере. Браузерное поле email проверяет вид адреса, но не существование ящика и не блокирует прямой HTTP-запрос. [MDN объясняет необходимость обоих шагов](https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/Input_validation).

Ограничьте частоту запросов регистрации и писем подтверждения. Выбирайте лимиты по своему трафику и стоимости создания аккаунта; один IP могут использовать многие обычные посетители. Honeypot — дополнительное поле, которое люди не должны заполнять, — помогает заметить простую автоматическую отправку. Проверяйте его на сервере и убедитесь, что автозаполнение и вспомогательные инструменты не вызывают ложные отказы. Более сложные скрипты могут оставить поле пустым.

Не выдавайте дорогие пробные функции или другие ресурсы, пока требования не выполнены. Сопоставляйте всплески создания аккаунтов с их дальнейшими действиями. Эти меры соответствуют многоуровневому подходу из [рекомендаций OWASP против автоматизации](https://cheatsheetseries.owasp.org/cheatsheets/Bot_Management_and_Anti-Automation_Cheat_Sheet.html). Лимиты частоты, honeypot и ограничения пробного периода реализуете вы; Signup Protection их не предоставляет и не настраивает.

## Получите токен при показе формы

[Emvero Signup Protection](https://emvero.io/ru/signup-protection/) сравнивает соединение, получившее токен страницы, с запросом отправки формы. Он дополняет решение email свидетельствами о визите. Сервис не возвращает булево «человек или бот» или постоянный ID посетителя и не считает повторные аккаунты между визитами.

Откройте Signup Protection в аккаунте, включите подключение и дождитесь готовности. Добавьте ключ страницы для HTTPS-origin формы. Ключ страницы `fp_key_…` публичный и нужен браузеру; секретный API-ключ `emv_…` остается на сервере.

Загрузите `fp-token.js` и отдельно обслуживаемый `fp-probe.js` с кодом клиента вашего аккаунта. Внутри формы держите скрытое поле, например `fp_token`. Когда форма станет видна, создайте `FpToken` с endpoint, ключом страницы и настройками и вызовите `visitToken.fetch(vid)`. Для сразу видимой формы запускайте по готовности страницы, для диалога — при открытии. Соблюдайте требования к согласию. Настройка `{ quic: true }` включает необязательную сессию WebTransport.

`vid` — непрозрачный идентификатор визита строкой или Promise. Не используйте ID аккаунта, email или телефон. `fetch(vid)` возвращает токен либо пустую строку. Ваш код записывает результат в скрытое поле; библиотека поле не обновляет. При отсутствующем или несовместимом файле пробы токена не будет. Отдельная браузерная проверка может остаться неоцененной при пригодном токене.

Начинайте сбор, пока человек видит и заполняет форму. Сбор только при отправке может вызвать находку быстрой отправки. В долгой форме повторно вызовите `visitToken.fetch()` до истечения срока и обновите поле. Проба хранит пригодный предыдущий токен в памяти страницы. При пригодном предыдущем токене время первой выдачи сохраняется, только если не изменились IPv4-адрес либо префикс IPv6 /64, семейство, основная версия и платформа браузера, а визит начался не больше 24 часов назад. Иначе отсчет начинается заново. Отправка формы вскоре после такого обновления может вызвать находку быстрой отправки. В текущем профиле срок составляет 15 минут. Передайте с формой текущее непрозрачное значение поля.

Если скрипт или запрос токена завершится ошибкой, поле может остаться пустым, а форма — отправиться. Обработайте результат на сервере. В [инструкции установки](https://docs.emvero.io/using/signup-page/) описаны скрипт, разрешенные origin, обновление токена и Content-Security-Policy. Файл пробы обновляется отдельно от скрипта токена. Если он заблокирован или недоступен, получить токен нельзя. При пригодном токене отдельная проверка браузера все равно может остаться неоцененной.

## Выберите серверную проверку

Используйте `POST /v1/signup-checks`, чтобы проверить email и визит вместе. Передайте `email`, скрытое поле как `token` и полученные сервером `ip`, `user_agent` и доступные `client_hints`. За прокси определяйте IP клиента по настройкам доверенных прокси, а не по утверждающему его полю формы.

Если email уже проверяется в другом месте или будет проверен позже, используйте `POST /v1/signup-signals` без `email` и `variant`. Его действие основано только на сигналах и не заменяет ваше правило для email. Отсутствующие данные ограничивают доступные сравнения, а не подтверждают их успешность.

Оцененные сигналы стоят пять кредитов. Исходы `token_unusable` и `unavailable` не расходуют кредиты на сигналы; в совмещенной проверке email оплачивается отдельно. До начала на балансе должно хватать средств для запрошенных резервов. Смотрите [цены и калькулятор кредитов](https://emvero.io/ru/pricing/), а также [контракт запросов и ответов](https://docs.emvero.io/using/signup-protection/).

## Свяжите действие с доступом к аккаунту

Примените внешнее `action` совмещенного ответа по таблице выше. В коде разделяйте `email.status`, `signals.status` и `action`. Сигналы могут потребовать подтверждения email, но не вызвать `reject`; они никогда не смягчают решение email.

При `allow_with_email_confirmation` приложение отправляет письмо и проверяет ссылку или код до выдачи соответствующего доступа. Проверка Emvero не отправляет писем на проверяемый адрес. Подтверждение устанавливает контроль ящика, а не уникальность человека. [Руководство по валидации формы регистрации](https://emvero.io/ru/guides/signup-form-validation/) разбирает результаты email; статья о [проверке и подтверждении](https://emvero.io/ru/blog/email-verification-vs-email-confirmation/) объясняет различия процессов.

Находки браузерной пробы `fp_probe_forged` и `fp_probe_automation` требуют подтверждения, когда email разрешил бы продолжение. `fp_probe_tampering` информационная. Отдельный массив `signals.notes` содержит `bot_claim` и `bot_operator`, а также наблюдения соединения и браузера. Эти заметки различают заявленные краулеры и инструменты, не меняя действие по умолчанию. Даже заявление краулера вне сети его оператора остается информационным. Отсутствие заявления не доказывает, что посетитель — человек.

Читайте `signal_codes` для находок, повысивших действие, и `signals.findings` для более полных свидетельств. Почтовые `reason_codes` остаются внутри `email`. Находки VPN, Tor, прокси и хостинга по умолчанию информационные и сами не повышают действие.

## Разделяйте неполные проверки и ошибки

Пустой токен дает `signals.status: token_unusable` с `fp_token_absent` и требует подтверждения, когда email разрешил бы продолжение. Сбой сервиса дает `signals.status: unavailable`; общее действие следует только email. Определите, какой доступ разрешает приложение во время сбоя. Недоступные сигналы не устанавливают безопасность визита.

При `email.status` со значением `pending` сохраняйте требование подтверждения и запрашивайте `GET /v1/signup-checks/{id}` через `email.retry_after_ms`. Чтение возвращает сохраненные сигналы с текущим email и пересчитывает действие, не оценивая визит заново. Результат email `unknown` означает неопределенность, а не некорректный адрес.

HTTP-ошибка — отдельный исход интеграции. Исправьте поля после `400`, проверьте баланс после `402` и обработайте отключенное подключение после `409 signup_protection_disabled`. Соблюдайте `Retry-After` при повторяемых лимитах или незавершенном запросе. Ошибка учета не является решением регистрации: сохраните попытку и следуйте [инструкции API по ошибкам и повторам](https://docs.emvero.io/using/errors/). Совмещенный запрос может начать оценку сигналов до отказа резерва email, поэтому `402` не гарантирует, что запроса сигналов не было.

## Повторяйте запрос с тем же ключом операции

Создайте один `Idempotency-Key` для логической попытки регистрации и храните ключ и тело для транспортного повтора. В пределах 30 минут те же ключ и тело возвращают сохраненную проверку без второго списания. Другое тело с тем же ключом дает `409 idempotency_conflict`; пока первый запрос выполняется, `409 request_in_progress` указывает подождать.

Тот же токен в новой операции отличается от повтора исходной. Второе предъявление тому же аккаунту в пределах окна повторного использования может добавить `fp_token_reused` и потребовать подтверждения. Не создавайте новый ключ только из-за потерянного ответа. Для новой попытки нужен новый токен формы; [контракт идемпотентности](https://docs.emvero.io/using/idempotency/) задает границу повтора.

## Проверьте обычные и неполные отправки

- Заполните обычную форму после начала сбора. Проверьте, что сервер получает токен и наблюдаемые данные и применяет внешнее действие. Обычный визит тоже не гарантирует `allow`.
- Отправьте форму без токена. Убедитесь, что приложение получает `token_unusable` и предлагает необходимое подтверждение ящика.
- Смоделируйте сигналы `unavailable` и email `pending` в тестовом окружении. Отдельно проверьте правило при сбое и опрос сохраненных проверок.
- Повторите тот же запрос с сохраненным ключом. Затем проверьте новую операцию с тем же токеном. Убедитесь в различии между повтором и `fp_token_reused`.
- Проверьте отклоненный email и информационную сетевую находку. Отказ по email должен сохраниться; одна метка сети не должна стать отказом Emvero.

Наблюдайте решения, неполные проверки, завершенные подтверждения и выдачу пробных ресурсов. Не записывайте токены и секретные ключи в логи. Настраивайте ограничения по наблюдаемому злоупотреблению и неудачным обычным регистрациям. В Emvero нет редактора собственных правил регистрации или готового коннектора CMS.

[Все руководства](https://emvero.io/ru/guides/)

## Подключите свой процесс регистрации

Создайте аккаунт Emvero, откройте Signup Protection и создайте ключ страницы. Затем свяжите форму и сервер по инструкции установки.

Начать бесплатно

Документация
