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