Битрикс антиспам, защита веб форм от ботов

=this.Name}
Задать вопрос

В 1С-Битрикс, есть встроенная CAPTCHA и ее легко обходят боты, при этом не важно, какой это компонент: веб форма, форма обратной связи или компонент регистрации.

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

1. Антибот и антиспам - с дополнительным полем в компоненте регистрации.

В файле init.php пишем обработчик:

AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserRegisterHandler");
function OnBeforeUserRegisterHandler(&$arFields)
{
    global $APPLICATION;
    
    //В файл regisr_txt.php здесь будут записываться все регистрации.
    $_REQUEST['DATE'] = date('d-m-Y H:i:s');
    $tttfile=dirname(__FILE__).'/regisr_txt.php';
file_put_contents($tttfile, "<pre>".print_r($_REQUEST,1)."</pre>\n",FILE_APPEND); if(isset($_REQUEST['ANTIBOT']) && is_array($_REQUEST['ANTIBOT'])) { foreach($_REQUEST['ANTIBOT'] as $k=>$v) if(empty($v)) unset($_REQUEST['ANTIBOT'][$k]); } if($_REQUEST['ANTIBOT'] || !isset($_REQUEST['ANTIBOT'])) { $APPLICATION->ThrowException('Прощай бот.'); return false; } }

В форме нужно создать дополнительный input, и скрыть его стилями, пример:

<input type="text" value="" name="ANTIBOT[NAME]">


2. Антибот от ссылок в форме.

Часто от ботов / спамеров приходят сообщения через форму обратной связи с ссылками на левые сайты и т.д.
С ними тоже можно бороться через обработчик событий, ниже рассмотрим рабочий пример.

В файле 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;
	}
}


3. Антибот / антиспам - с дополнительным полем для любой веб формы.

В файле init.php пишем обработчик:

AddEventHandler('form', 'onBeforeResultAdd', 'form_onBeforeResultAdd');
function form_onBeforeResultAdd($WEB_FORM_ID, &$arFields, &$arrVALUES)
{
    global $APPLICATION;
    if(isset($_REQUEST['ANTIBOT']) && is_array($_REQUEST['ANTIBOT']))
    {
        foreach($_REQUEST['ANTIBOT'] as $k=>$v)
            if(empty($v))
                unset($_REQUEST['ANTIBOT'][$k]);
    }
    if($_REQUEST['ANTIBOT'] || !isset($_REQUEST['ANTIBOT']))
    {
        $APPLICATION->ThrowException('Ботам отправка запрещена.');
        return false;
    }
}

В форме нужно создать дополнительный input, и скрыть его стилями, пример:

<input type="text" value="" name="ANTIBOT[NAME]">

Так как боты, заполняют все input которые есть в форме (даже скрытые стилями), то после заполнения нашего input, обработчик его примет за спам и не пропустит.


В фото статьи рабочий пример с сайта заказчика.

Заказать услугу
Оформите заявку, мы свяжемся с вами в ближайшее время и ответим на все интересующие вопросы.

 
Текст сообщения*
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Загрузить изображение