Антиспам
Три уровня защиты: honeypot, rate limiting, CORS.
Honeypot
Скрытое поле формы, невидимое для людей. Боты заполняют его автоматически — заявка отклоняется. Людьми поле не заполняется — заявка проходит.
Подключение
Добавьте скрытое поле с именем _honey в форму и скройте его через CSS:
<form data-formhook data-sitekey="ВАШ_SITE_KEY">
<input name="name" placeholder="Имя" required />
<input name="email" type="email" required />
<!-- Honeypot: скрыто от людей, видно ботам -->
<input
name="_honey"
type="text"
tabindex="-1"
autocomplete="off"
style="position:absolute;left:-9999px;opacity:0;"
aria-hidden="true"
/>
<div class="formhook-captcha"></div>
<button type="submit">Отправить</button>
</form> _honey распознаётся FormHook автоматически. Если оно заполнено — заявка отклоняется с HTTP 200 (чтобы не выдавать ботам информацию о защите).
Rate Limiting
Ограничение числа заявок с одного IP-адреса.
| Лимит | Значение |
|---|---|
| Запросов / секунду с одного IP | 100 |
| HTTP-код при превышении | 429 Too Many Requests |
| Код ошибки SDK | SUBMIT_RATE_LIMITED |
Настроить собственные лимиты на уровне сайта можно в настройках сайта.
CORS (разрешённые домены)
FormHook принимает браузерные запросы только с доменов из белого списка.
Запросы с неразрешённых Origins возвращают 403 CORS_FORBIDDEN.
Настройка
Дашборд → Сайт → Настройки → Разрешённые домены.
| Формат | Пример |
|---|---|
| С протоколом | https://example.com |
| Localhost | http://localhost:3000 |
| Поддомен | https://landing.example.com |
https://example.com — правильно, https://example.com/ — нет.
Капча
Встроенная математическая капча — четвёртый уровень защиты. Настраивается отдельно — см. Капча.
Рекомендуемая конфигурация
- ✓Honeypot — включить всегда, не требует действий от пользователя
- ✓CORS — указать только нужные домены
- ✓Капча — включить если идёт спам, несмотря на honeypot
- ✓Верификация домена — обязательно для продакшена