Спам-боты — частая проблема для сайтов с открытой регистрацией. Они создают фейковые аккаунты, рассылают рекламу и даже могут использоваться для мошенничества. В этой статье разберём, как настроить защиту от автоматических регистраций в 1С-Битрикс, используя встроенные инструменты и дополнительные методы фильтрации.
1. Базовый способ: проверка имени и фамилии
Самый простой способ отсечь часть ботов — добавить проверку введённых данных перед регистрацией. Для этого используем обработчики событий OnBeforeUserRegister (регистрация) и OnBeforeUserUpdate (обновление профиля).
Код для init.php
AddEventHandler("main", "OnBeforeUserRegister", "checkUserForSpam");
AddEventHandler("main", "OnBeforeUserUpdate", "checkUserForSpam");
function checkUserForSpam(&$args) {
$spamKeywords = [
'Вам оплатили', 'www.', 'http://', 'купить', 'заказать',
'номер телефона', 'оплатите', 'перейдите'
];
foreach ($spamKeywords as $keyword) {
if (stripos($args['NAME'], $keyword) !== false || stripos($args['LAST_NAME'], $keyword) !== false) {
$GLOBALS['APPLICATION']->ThrowException('Обнаружены подозрительные данные. Обратитесь к администратору.');
return false;
}
}
return true;
}Что делает этот код?
-
Проверяет имя и фамилию пользователя на наличие спам-ключей.
-
Использует
stripos(регистронезависимый поиск). -
Блокирует регистрацию, если найдено совпадение.
2. Улучшенная защита: регулярные выражения и проверка email
Некоторые боты маскируют ссылки (example точка ru вместо example.ru). Чтобы их отлавливать, используем регулярные выражения и проверку email.
Дополненный код
function checkUserForSpam(&$args) {
// Проверка имени и фамилии
$nameSpamPatterns = ['/оплат[иы]/ui', '/купи[тьт]/ui', '/заказ[аы]/ui', '/http:\/\//i', '/www\./i'];
foreach ($nameSpamPatterns as $pattern) {
if (preg_match($pattern, $args['NAME']) || preg_match($pattern, $args['LAST_NAME'])) {
$GLOBALS['APPLICATION']->ThrowException('Обнаружены запрещённые слова в данных.');
return false;
}
}
// Проверка email на временные домены
$tempEmailDomains = ['mail.ru', 'yandex.ru', 'gmail.com']; // можно расширить список
$emailDomain = explode('@', $args['EMAIL'])[1] ?? '';
if (in_array(strtolower($emailDomain), $tempEmailDomains)) {
$GLOBALS['APPLICATION']->ThrowException('Регистрация с временных email запрещена.');
return false;
}
return true;
}3. Дополнительные меры защиты
3.1. Включение капчи
Битрикс поддерживает CAPTCHA и reCAPTCHA (Google). Настройка:
-
Админка → Настройки → Настройки модулей → Главный модуль → CAPTCHA.
-
Выбрать тип (например, reCAPTCHA v3).
-
Добавить поля в форму регистрации.
3.2. Логирование попыток регистрации
Чтобы анализировать атаки, можно записывать подозрительные попытки в лог:
CEventLog::Add([
'SEVERITY' => 'WARNING',
'AUDIT_TYPE_ID' => 'SPAM_ATTEMPT',
'MODULE_ID' => 'main',
'DESCRIPTION' => 'Попытка спама: ' . print_r($args, true),
]);3.3. Ограничение регистраций с одного IP
В init.php можно добавить проверку по IP:
$userIp = $_SERVER['REMOTE_ADDR'];
$bannedIps = ['123.123.123.123', '111.222.333.444']; // можно подгружать из базы
if (in_array($userIp, $bannedIps)) {
$GLOBALS['APPLICATION']->ThrowException('Доступ с вашего IP запрещён.');
return false;
}4. Готовые решения из Маркетплейса
Если нет времени на кастомную разработку, можно установить модули:
-
«Антиспам: защита форм»
-
«StopSpam — защита от спама»
-
«Капча для форм»
Итог
-
Базовый уровень: проверка имени/фамилии на спам-слова.
-
Продвинутый уровень: регулярные выражения + проверка email.
-
Максимальная защита: капча + логирование + чёрные списки IP.
Комбинируя эти методы, можно значительно снизить количество фейковых регистраций на сайте.