Одна из наиболее распространенных проблем для многих сайтов - это массовая регистрация и заполнения обратных форм ботами. Сегодня мы решим эту проблему для сайта на CMS Битрикс

Первым делом идем в init.php и прописываем следующий код

AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserRegisterHandler");
function OnBeforeUserRegisterHandler(&$arFields)
{ global $APPLICATION; if(isset($_REQUEST['PROHODANET']) && is_array($_REQUEST['PROHODANET'])) { foreach($_REQUEST['PROHODANET'] as $k=>$v) if(empty($v)) unset($_REQUEST['PROHODANET'][$k]); } if($_REQUEST['PROHODANET'] || !isset($_REQUEST['PROHODANET'])) { $APPLICATION->ThrowException('Бот не пройдет'); return false; }
}

В шаблоне формы регистрации нам необходимо добавить дополнительное input поле

<input type="text" value="" name="PROHODANET">

Так как боты пытаются заполнить все поля, то и наше новое поле не станет исключением, наш обработчик будет отслеживать это действие и блокировать всех кто заполнит это поле

Теперь перейдем к защите наших форм обратной связи. Снова идем в init.php и вставляем туда следующий код.

AddEventHandler('form', 'onBeforeResultAdd', 'link_onBeforeResultAdd');
function link_onBeforeResultAdd($WEB_FORM_ID, &$arFields, &$arrVALUES)
{	global $APPLICATION;	$spam = false;	foreach($arrVALUES as $prop => $val) {	if (strstr($prop, 'form_') && strstr($val, 'http')) {	$spam = true;	break;	}	}	if ($spam == true) {	$err_str = 'Запрещено указывать ссылки в полях формы!';	$APPLICATION->ThrowException($err_str);	return false;	}
}

Как правило боты пытаются через форму обратной связи отправить ссылку. Данная функция будет проверять наличие ссылки в форме обратной связи и блокировать отправку таких сообщений.

Второй способ это также добавить скрытое поле, в вебформу

AddEventHandler('form', 'onBeforeResultAdd', 'form_onBeforeResultAdd');
function form_onBeforeResultAdd($WEB_FORM_ID, &$arFields, &$arrVALUES)
{ global $APPLICATION; if(isset($_REQUEST['PROHODANET']) && is_array($_REQUEST['PROHODANET'])) { foreach($_REQUEST['PROHODANET'] as $k=>$v) if(empty($v)) unset($_REQUEST['PROHODANET'][$k]); } if($_REQUEST['PROHODANET'] || !isset($_REQUEST['PROHODANET'])) { $APPLICATION->ThrowException('Ботам отправка запрещена.'); return false; }
}
Готовы сделать всю работу за Вас
от750
  • 60 минут


Поработаем?

Опишите свой запрос, мы расчитаем стоимость вашей задачи.