Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Проблема: спам через форму bitrix



Проблема: спам-боты спамят через битрикс-форму, хотя на ней есть капча.
На сайте есть несколько форм, которые работают через разные модули Iblock и form.result.new.
Капчу от битрикса они обходят моментально, а еще она неудобная и некрасивая для пользователей. Да и любая капча неудобна для клиентов.

Решение: Добавьте поле какое-нибудь лишнее и назовите его телефон, например, а для пользователей спрячьте.
Спам машины будут это поле заполнять, а пользователи нет. Если поле это заполнено значит спам, и не добавляем.

Подробное описание решения

делаем 2 поля одинаковых типа email в форме
одно скрываем стилями (через display:none)

Роботы заполняют оба
Мы делаем проверку в init.php и не отправляем

У меня ID формы 3, код вопроса SIMPLE_QUESTION_478

вариант 1
результат в заполнении будет, но письма на почте нет
AddEventHandler("main", "OnBeforeEventAdd", "MyOnBeforeEventAdd");
function MyOnBeforeEventAdd(&$event, &$lid, &$arFields){
   if(($event=="FORM_FILLING_SIMPLE_FORM_3") && ($arFields["SIMPLE_QUESTION_478"] != ' ')){        
      return false;
   }  
}
вариант 2
тут мы вообще удаляем результат. Для робота отображается, что все ок, мы добавили (чтобы не пробовал еще раз заполнить), а резальтат удален
Если у вас стоит модуль уведомлений в телеграм https://marketplace.1c-bitrix.ru/solutions/xzag.telegram/ , то он запускается как раз по данному событию, но с дефолтной сортировкой, а мы запускаем раньше и удаляем результат со спамом, поэтому уведомлений не будет
AddEventHandler('form', 'onAfterResultAdd', 'MyAfterResultAdd',1);
function MyAfterResultAdd($webFormId, $resultId){ 
  if ($webFormId == 3){
    $arAnswer = CFormResult::GetDataByID(
        $resultId, 
        array("SIMPLE_QUESTION_478"),  
        $arResult, 
        $arAnswer2
    );
    if(!empty($arAnswer["SIMPLE_QUESTION_478"][0]["USER_TEXT"])){
        CFormResult::Delete($resultId,"N");
    } 
  }
}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!