Разработка модуля защиты от спама 1С-Битрикс
Форма обратной связи начинает принимать 200–300 спам-заявок в сутки. Менеджеры перестают доверять данным из формы и начинают пропускать реальные заявки. Битрикс предлагает встроенную Google reCAPTCHA v2 через компонент form, но боты давно умеют её обходить с помощью сервисов решения капч. На высоконагруженных формах нужна многоуровневая защита.
Почему один метод не работает
Каждый способ защиты от спама имеет слабые места:
| Метод | Слабость |
|---|---|
| Google reCAPTCHA v2 | Сервисы решения капч, $0.5–1/1000 решений |
| reCAPTCHA v3 / hCaptcha | Ложные срабатывания на реальных пользователях, блокировка России |
| Honeypot-поле | Умные боты игнорируют скрытые поля |
| Проверка времени заполнения | Боты с имитацией человека обходят |
| IP-блокировка | Боты используют ротируемые прокси |
Эффективная защита — многоуровневая, где каждый метод перекрывает слабости других.
Архитектура модуля
Слой 1 — Honeypot + таймер. Скрытое поле с именем website (ботам понравится) и поле form_fill_time. Если website заполнено или form_fill_time < 3 секунды — заявка от бота с вероятностью 99%.
Слой 2 — Анализ поведения. JavaScript пишет события мыши и нажатий клавиш в скрытое поле. При отправке сервер проверяет: было ли реальное движение мыши, была ли разумная скорость набора. Боты с имитацией человека тратят на это ресурсы и реже их используют для массовых атак.
Слой 3 — Rate limiting по IP и fingerprint. Не более N заявок с одного IP за M минут. Fingerprint строится из User-Agent, Accept-Language, Accept-Encoding — не из IP. Правила хранятся в myvendor_spam_rate:
CREATE TABLE myvendor_spam_rate (
fingerprint VARCHAR(64) NOT NULL,
form_id VARCHAR(100),
hits INT DEFAULT 1,
first_hit TIMESTAMP DEFAULT NOW(),
last_hit TIMESTAMP DEFAULT NOW(),
blocked BOOLEAN DEFAULT false,
PRIMARY KEY (fingerprint, form_id)
);
Слой 4 — Репутационные базы. Проверка IP отправителя через AbuseIPDB API или Spamhaus. При score выше порога — блокировка или повышенная сложность проверки. Результаты кешируются в myvendor_spam_ip_cache с TTL 24 часа, чтобы не долбить внешний API на каждый запрос.
Слой 5 — ML-классификатор текста. Для форм с текстовыми полями (сообщение, комментарий) — анализ содержимого. Простой наивный байесовский классификатор, обученный на исторических спам/не-спам данных конкретного сайта. Хранится в myvendor_spam_model, переобучается агентом раз в неделю.
Детально: интеграция с формами Битрикс
Перехват форм через событие OnWebFormResult_Add (модуль form):
AddEventHandler('form', 'OnWebFormResult_Add', function(&$arFields, &$arValues) {
$verdict = \MyVendor\Spam\Analyzer::analyze(
ip: $_SERVER['REMOTE_ADDR'],
fingerprint: \MyVendor\Spam\Fingerprint::get(),
formId: $arFields['FORM_ID'],
fields: $arValues,
fillTime: (int)($_POST['form_fill_time'] ?? 0)
);
if ($verdict->isSpam()) {
// Не блокируем — сохраняем с пометкой SPAM
$arFields['COMMENTS'] .= "\n[SPAM: {$verdict->getReason()}]";
$arFields['STATUS'] = 'N';
}
});
Важно: спам-заявки не удаляются, а помечаются. Это позволяет периодически просматривать помеченные заявки и исправлять ложные срабатывания — данные для улучшения классификатора.
Защита корзины и регистрации
Спам-боты атакуют не только формы связи, но и форму регистрации (создание мусорных аккаунтов) и корзину (тестирование украденных карт через мелкие платежи). Модуль расширяется на эти точки: для регистрации — те же honeypot + rate limit, для корзины — детектирование паттернов (много мелких заказов с разных карт за короткое время).
Сроки разработки
| Масштаб | Состав | Срок |
|---|---|---|
| Базовый | Honeypot + таймер + rate limiting | 1–2 недели |
| Средний | + репутационные базы + поведенческий анализ | 3–4 недели |
| Расширенный | + ML-классификатор + защита корзины + аналитика | 6–8 недель |
Прежде чем заказывать сложное решение, оцените масштаб проблемы: иногда достаточно honeypot + rate limit, и это решит 95% спама за 1 неделю.







