Многоуровневая защита форм Битрикс: как мы снизили спам на 95%
Мы столкнулись с проектом, где 95% заявок были спамом: CRM забивалась мусорными лидами, email-очереди перегружались, аналитика искажалась. Ежемесячные потери на ручной модерации достигали сотен тысяч рублей. После внедрения нашей защиты нагрузка на сервер снизилась втрое, а расходы на модерацию сократились до 90%. На другом проекте с 5000 форм в день клиент сэкономил значительные средства за счёт автоматизации фильтрации. Стандартная CAPTCHA от Битрикс (bitrix:main.captcha) — изображение с символами — практически не работает: современные боты распознают её с точностью 95%+. Нужен многоуровневый подход, который не требует от пользователя лишних действий и не ломает UX.
Почему одного метода недостаточно?
Каждый метод защиты имеет слабые места. Honeypot останавливает простых ботов, но умные обходят скрытые поля. Тайминг блокирует мгновенные отправки, но некоторые боты задерживаются. Rate limiter эффективен против массовых атак, но не защищает от распределённых. Комбинируя их, мы перекрываем все векторы.
Например, honeypot отсеивает 80% ботов, но оставшиеся 20% — это умные боты, которые обходят скрытые поля. Тайминг ловит ещё 50% из них, но некоторые боты эмулируют задержку. Rate limiter завершает картину, блокируя повторные атаки с одного источника. Такая комбинация даёт совокупную эффективность 95%+.
Какие методы защищают от спама?
Honeypot: скрытое поле для ботов
Добавляем в форму скрытое поле, которое боты заполняют, а люди — нет. Сервер проверяет: если поле не пустое — тихо игнорируем запрос.
<div style="position:absolute;left:-9999px;top:-9999px;opacity:0;height:0;overflow:hidden">
<label for="email_confirm">Leave empty</label>
<input type="text" id="email_confirm" name="email_confirm" tabindex="-1" autocomplete="off" value="">
</div>
// Серверная проверка
if (!empty($data['email_confirm'])) {
echo json_encode(['success' => true]);
exit;
}
Тайминг: защита от быстрых отправок
При рендере записываем timestamp в скрытое поле. На сервере проверяем: если прошло меньше 3 секунд — бот (тихий успех). Если больше часа — сессия истекла.
$formToken = base64_encode(json_encode([
'ts' => time(),
'sessid' => bitrix_sessid(),
]));
// в шаблоне: <input type="hidden" name="form_token" value="<?= htmlspecialchars($formToken) ?>">
// Проверка
$token = json_decode(base64_decode($data['form_token'] ?? ''), true);
$timeElapsed = time() - (int)($token['ts'] ?? 0);
if ($timeElapsed < 3) {
$this->markSpam('timing', $timeElapsed);
exit(json_encode(['success' => true]));
}
if ($timeElapsed > 3600) {
exit(json_encode(['success' => false, 'error' => 'Сессия истекла. Обновите страницу.']));
}
Rate limiter: ограничение частоты запросов
Развёрнутый пример класса RateLimiter
Ограничиваем количество заявок с одного IP, email или телефона за период. Используем кеш Битрикс или Redis.
class RateLimiter {
private const LIMITS = [
'ip' => ['max' => 5, 'window' => 3600],
'email' => ['max' => 3, 'window' => 86400],
'phone' => ['max' => 2, 'window' => 86400],
];
public function check(string $type, string $identifier): bool {
$limit = self::LIMITS[$type] ?? ['max' => 3, 'window' => 3600];
$key = 'spam_rl_'.$type.'_'.md5($identifier);
$cache = \Bitrix\Main\Application::getInstance()->getManagedCache();
$count = (int)$cache->get($key);
if ($count >= $limit['max']) {
\CEventLog::Add([
'SEVERITY' => 'WARNING',
'AUDIT_TYPE_ID' => 'SPAM_BLOCKED',
'MODULE_ID' => 'local.antispam',
'DESCRIPTION' => "Blocked: type={$type}, id={$identifier}",
]);
return false;
}
$cache->set($key, $count + 1, $limit['window']);
return true;
}
}
В журнале событий Битрикс (CEventLog) фиксируется: тип атаки, идентификатор, IP, время. Это помогает анализировать паттерны и корректировать лимиты.
Дополнительно проверяем email на disposable-домены и MX-запись, а телефон — по формату и чёрным спискам. Это отсеивает ещё ~60% остаточного спама.
Какую капчу выбрать для российского сайта?
Для российской аудитории Google reCAPTCHA может блокироваться. Мы используем Yandex SmartCaptcha или Cloudflare Turnstile — они работают без VPN и не требуют ввода символов. Интеграция аналогична: фронтенд получает токен, сервер проверяет через API.
// Yandex SmartCaptcha
function verifyYandexCaptcha(string $token): bool {
$ch = curl_init('https://smartcaptcha.yandexcloud.net/validate');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'secret' => $secretKey,
'token' => $token,
'ip' => $_SERVER['REMOTE_ADDR'],
]),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
return ($result['status'] ?? '') === 'ok';
}
Сравнение провайдеров и их эффективность
| Провайдер |
Тип проверки |
Доступность в РФ |
UX |
Эффективность |
| reCAPTCHA v3 |
Безкапчевая (оценка) |
Нестабильно |
Высокий |
90–95% |
| Yandex SmartCaptcha |
Безкапчевая / кнопка |
Стабильно |
Высокий |
90–95% |
| Cloudflare Turnstile |
Безкапчевая |
Стабильно |
Высокий |
85–90% |
Эффективность комбинации базовых методов против спама:
| Метод |
Описание |
Эффективность |
| Honeypot |
Скрытое поле для ботов |
~80% спама |
| Тайминг |
Отправка быстрее 3с = бот |
~50% ботов |
| Rate limiter |
Лимит отправок с одного IP |
~70% массовых атак |
| reCAPTCHA v3 / Turnstile |
Безкапчевая проверка |
90–95% |
| Проверка email/телефона |
MX-запись, disposable-домены, чёрные списки |
~60% остаточного |
Что входит в наш антиспам-пакет?
Этапы работ
- Аналитика — сбор требований, аудит существующих форм и нагрузки.
- Проектирование — выбор методов, архитектура с учётом кеша и производительности.
- Реализация — разработка модуля, написание кода, юнит-тесты.
- Тест — нагрузочное тестирование (имитация ботов), проверка UX.
- Деплой — развёртывание на боевом сервере, мониторинг первых дней.
Сроки и стоимость
Базовый набор (honeypot + тайминг + rate limiter) — 3–5 дней. Полный стек со SmartCaptcha и дашбордом — 1–2 недели. Стоимость рассчитывается индивидуально в зависимости от объёма форм и нагрузки. В среднем экономия бюджета на спаме — до 90% затрат на модерацию.
Что делать, если rate limiter блокирует реальных пользователей?
Мы настраиваем адаптивные лимиты: например, после 3 отправок с одного IP в час показываем капчу вместо полной блокировки. Также ведём лог и анализируем ложные срабатывания, корректируя пороги.
Почему стоит выбрать нас?
Мы — команда сертифицированных специалистов 1С-Битрикс с опытом более 50 проектов в области защиты форм. Наши решения проверены на проектах с нагрузкой 10 000+ заявок в сутки. Гарантируем поддержку и доработки после внедрения. Закажите предварительную оценку вашего проекта — получите консультацию и расчёт сроков. Свяжитесь с нами для предварительной оценки текущих форм.
Безопасность сайта на 1С-Битрикс: аудит, защита, мониторинг
Последний серьёзный массовый взлом Битриксов — через уязвимость в модуле vote (BDU:2022-05127). Через неё заливали веб-шеллы пачками. Причина? Владельцы не обновляли ядро по полгода, а модуль голосований стоял «на всякий случай». С тех пор мало что изменилось в подходе: Битрикс выпускает патч, а его ставят через три месяца. Мы выстраиваем комплексную безопасность сайта так, чтобы между выходом патча и его применением проходили дни, а не месяцы. И чтобы даже без патча сайт не лёг от типовой атаки.
Закажите аудит безопасности сайта — получите отчёт с приоритетами и план закрытия уязвимостей за 1-2 дня.
Модуль «Проактивная защита» — мощный, но не из коробки
Модуль security установлен почти на каждом Битриксе, но настроен правильно — от силы на каждом пятом. Что конкретно нужно включить и подкрутить:
- WAF (Веб-антивирус) — фильтрует SQL-инъекции, XSS, CSRF, path traversal на уровне
OnPageStart. Ключевая настройка — режим «Активная реакция»: не просто логировать, а блокировать. В /bitrix/admin/security_filter.php проверяем, что все типы атак включены, а исключения — минимальны.
- Контроль активности (
/bitrix/admin/security_iprule.php) — лимиты на количество запросов с одного IP. По умолчанию 100 запросов в минуту. Для API-эндпоинтов, куда стучат мобильные приложения, нужны исключения — иначе заблокируете своих же пользователей.
- 2FA — OTP через Google Authenticator. Включается в настройках пользователя. Для группы «Администраторы» делаем обязательным через
OnAfterUserAuthorize — без второго фактора в админку не пускаем.
- Контроль целостности (
/bitrix/admin/security_file_verifier.php) — хэши системных файлов. Если кто-то изменил файл в /bitrix/modules/ — система заметит. Запускаем проверку по cron ежедневно через агент CSecurityFileVerifier::Verify().
- Стоп-лист —
b_security_filter_stoplist. Автоматическая блокировка IP при срабатывании WAF. Ручное добавление подсетей — когда видим сканеры.
- Журнал безопасности —
b_event_log. Кто, когда и что менял в админке. Хранение минимум 90 дней. При расследовании инцидента — бесценно.
Подробнее о настройках WAF
WAF в режиме «Активная реакция» блокирует до 95% автоматизированных атак. Но важно настроить исключения для легитимных запросов, например, для загрузки файлов через `\Bitrix\Main\Application::getInstance()->getContext()->getRequest()->getFileList()`. Иначе пользователи не смогут прикрепить изображения к комментариям. Проверяем журнал блокировок (Security → Protection → WAF → Log) и добавляем белые маски.
Что включает аудит безопасности сайта Битрикс?
Серверный уровень — тут чаще всего и дыры:
-
phpinfo() доступен по /info.php или /phpinfo.php — встречается на каждом третьем проекте. Атакующий получает версию PHP, пути, модули, конфигурацию. Удаляем.
-
display_errors = On на продакшне — стектрейсы с путями к файлам и именами таблиц улетают пользователю в браузер.
- PHP-функции
exec, system, passthru, proc_open не отключены в php.ini. Если веб-шелл всё-таки зальют — с этими функциями он получит полный контроль над сервером.
- Версия PHP < 8.1 — без security-апдейтов. PHP 7.4 больше не поддерживается, но до сих пор живёт на четверти проектов.
Уровень приложения:
- Устаревшие модули:
vote, forum, blog — часто стоят неиспользуемые, но с активными обработчиками. Деактивируем и удаляем.
- Кастомный код: grep по
$DB->Query( с конкатенацией $_REQUEST — классическая SQL-инъекция. Должны быть $DB->ForSql() или D7 ORM.
- Загрузка файлов: если
CFile::CheckFile() не вызывается или проверяет только расширение без MIME-типа — через форму обратной связи зальют .php файл.
-
dbconn.php и .env — должны быть закрыты правилами веб-сервера. Проверяем: curl https://site.ru/bitrix/.settings.php не должен отдавать ничего кроме 403.
SSL/TLS:
- Проверка через SSL Labs — рейтинг A или выше.
- HSTS с
max-age от 31536000 (год).
- Редирект HTTP -> HTTPS на уровне Nginx, не на уровне Битрикса.
Результат аудита — отчёт с приоритетами: Critical / High / Medium / Low. Критические закрываем в первый день. Свяжитесь с нами — оценим ваш проект за 1-2 дня.
Лечение взломанных сайтов — протокол действий
Сайт уже скомпрометирован — SEO-спам, редиректы на казино, веб-шелл в /upload/. Порядок действий:
- Изоляция — снимаем сайт, ставим заглушку. Если вредонос шифрует файлы или распространяется — каждая минута на счету.
- Определение вектора — логи доступа (
access.log), логи ошибок, b_event_log. Ищем POST-запросы к нетипичным файлам, обращения к /upload/*.php, подозрительные user-agent.
- Поиск вредоносного кода —
grep -r "eval(base64_decode" /home/bitrix/www/ — классика. Также ищем assert(, preg_replace с модификатором e, ${"_GET"}, обфусцированные переменные вида $GLOBALS['x46x65'].
- Проверка БД —
b_iblock_element_property и b_iblock_element на инъектированные скрипты и скрытые ссылки. SELECT * FROM b_iblock_element WHERE DETAIL_TEXT LIKE '%<script%' AND DETAIL_TEXT NOT LIKE '%bitrix%'.
- Чистка или восстановление — если заражение масштабное, проще восстановить из чистого бэкапа и накатить только контентные изменения из БД.
- Закрытие уязвимости — обновление ядра, удаление неиспользуемых модулей, правка кастомного кода.
- Запрос пересканирования — Google Search Console → «Запросить проверку», Яндекс.Вебмастер → «Я всё исправил».
Средняя стоимость восстановления после взлома — от 40 000 до 100 000 руб., а профилактический аудит обходится в 2-3 раза дешевле. Вложив 30 000 руб. в аудит, вы можете сэкономить до 200 000 руб. на ликвидации последствий.
Как защитить сайт на Битриксе от DDoS?
- Cloudflare / DDoS-Guard / Qrator — проксирование трафика. L3/L4 атаки фильтруются на их стороне. L7 — через правила и challenge-страницы. Важно: после подключения скрыть реальный IP сервера, иначе смысл теряется.
- Rate limiting на Nginx:
limit_req_zone для /bitrix/admin/, /api/, форм. Отдельные лимиты для авторизованных и анонимных пользователей.
- CAPTCHA —
\Bitrix\Main\Captcha\CaptchaManager для форм Битрикса или reCAPTCHA v3 для кастомных. v3 не раздражает пользователей — работает в фоне.
- Bot management — пропускаем Googlebot, YandexBot (проверка через reverse DNS), блокируем сканеры и скрейперы по User-Agent и поведению.
Сравнение: rate limiting на Nginx в 5 раз эффективнее стандартной защиты от перебора паролей в Битриксе, так как срезает атаку до того, как она дойдёт до PHP.
Резервное копирование — последний рубеж
- Ежедневные бэкапы: файлы через rsync + дамп PostgreSQL/MySQL через
pg_dump/mysqldump.
- Хранение в изолированном S3-совместимом хранилище. Ключевое слово — изолированном. Если бэкапы лежат на том же сервере, что и сайт, взломщик удалит и их.
- Ротация: daily × 7, weekly × 4, monthly × 12.
- Тестирование восстановления — раз в квартал разворачиваем бэкап на тестовом сервере. Бэкап, из которого невозможно восстановиться, — просто файл на диске.
- Мониторинг: если бэкап не прошёл — алерт в Telegram в течение часа.
Мониторинг — обнаружить до того, как позвонит клиент
- Uptime — проверка каждые 60 секунд через UptimeRobot / Zabbix / кастомный скрипт. Алерт в Telegram + звонок при даунтайме > 5 минут.
- Файловый мониторинг — inotify (Linux) или cron +
md5sum по критичным директориям. Новый .php в /upload/? Алерт немедленно.
- Сканирование на малварь — AI-BOLIT или ClamAV по расписанию. Проверка и файлов, и базы.
- SSL-сертификат — предупреждение за 30/14/7 дней до истечения. Let's Encrypt обновляется автоматически через certbot, но certbot тоже может сломаться.
- Блэклисты — проверка домена и IP в Google Safe Browsing, PhishTank, Spamhaus. Попадание = потеря трафика.
152-ФЗ и персональные данные
- HTTPS everywhere — редирект на уровне Nginx.
- Шифрование в БД: пароли через
\Bitrix\Main\Security\Password::hash() (bcrypt), токены — через openssl_encrypt.
- Политика конфиденциальности + cookie-баннер (модуль
main поддерживает из коробки через COption::SetOptionString("main", "cookie_agreement", "Y")).
- Журналирование доступа к ПД — кто и когда просматривал данные клиентов.
Что входит в работу (deliverables)
| Компонент |
Состав |
| Аудит безопасности |
Отчёт с критическими/высокими/средними/низкими уязвимостями, рекомендации по устранению |
| Устранение уязвимостей |
Пропатченный проект, обновлённые модули, настроенный WAF, 2FA, SSL |
| Лечение взлома |
clean-версия файлов, восстановленная БД, закрытый вектор, отчёт для поисковиков |
| Мониторинг |
Доступ к системе алертов, ежемесячный отчёт, выделенный инженер (на абоненте) |
| Документация |
Схема инфраструктуры, карта уязвимостей, инструкция по восстановлению |
| Обучение |
Воркшоп для администраторов: как реагировать на инциденты |
| Поддержка |
Фиксированный SLA, время реакции — от 1 часа |
Сроки
| Услуга |
Сроки |
Результат |
| Экспресс-аудит |
1-2 дня |
Критические уязвимости + план |
| Полный аудит |
3-5 дней |
Детальный отчёт, OWASP Top 10 |
| Устранение уязвимостей |
1-2 недели |
Пропатченный проект |
| Лечение взлома |
1-3 дня |
Чистый сайт + закрытый вектор |
| Мониторинг (абонент) |
Непрерывно |
Алерты + ежемесячный отчёт |
Работаем разово и на абоненте с фиксированным SLA. Для абонентских клиентов — выделенный инженер, который знает проект. Получите консультацию — оценим риски и составим смету за 1-2 дня.
Чек-лист: 15 пунктов, которые проверяем на каждом проекте
- Ядро 1С-Битрикс и модули — актуальная версия, неиспользуемые модули удалены.
- Модуль
security активен, WAF в режиме «Активная реакция».
- 2FA включена для всех учёток с доступом к админке.
-
/bitrix/admin/ закрыт по IP или за дополнительной HTTP-авторизацией.
- Политика паролей: от 12 символов, mixed case, цифры, спецсимволы.
- SSL/TLS: рейтинг A+ на SSL Labs, HSTS включён.
- Служебные файлы (
dbconn.php, .settings.php, .env, бэкапы, логи) — 403 из браузера.
- Права: 644 файлы, 755 директории. Веб-сервер не owner системных файлов.
- Security-заголовки:
Content-Security-Policy, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, Strict-Transport-Security, Referrer-Policy.
- Контроль целостности файлов — ежедневная проверка через агент.
- Бэкапы: ежедневные, изолированное хранение, проверка восстановимости.
-
b_event_log — хранение от 90 дней, регулярный просмотр.
- PHP 8.1+,
display_errors = Off, опасные функции отключены.
- Мониторинг uptime + алерты при изменении файлов в
/upload/.
- Reverse proxy или CDN с DDoS-защитой для высоконагруженных проектов.
Оценка уязвимостей проводится в соответствии с методологией OWASP Top 10 – Web Application Security Risks (см. Wikipedia). Комплексная безопасность сайта на Битрикс — это не разовая акция, а непрерывный процесс. Закажите полный аудит безопасности сайта сегодня, чтобы завтра не тратить бюджет на экстренное восстановление. Получите консультацию — мы ответим на любые вопросы.