Проблема: спам-боты спамят через битрикс-форму, хотя на ней есть капча. На сайте есть несколько форм, которые работают через разные модули 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; } } |
тут мы вообще удаляем результат. Для робота отображается, что все ок, мы добавили (чтобы не пробовал еще раз заполнить), а резальтат удален
Если у вас стоит модуль уведомлений в телеграм 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"); } } } |