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

Судя по проектам реализованных на 1С-Битрикс, встроенная CAPTCHA очень легко обходится спам-ботами. Давайте разбираться какие есть варианты решения данной проблемы.

Есть несколько методом борьбы со спамом. Самый распространенный из них, это добавить еще одно поле, и скрыть его для пользователей в браузере. В самом же обработчике проверять «если поле заполнено, значит это спам бот и результат никуда не отправляем».

Защита от спама при помощи JS вообще не работает, все эти валидации хороши лишь для пользователя, чтобы он правильно вводил емейл или телефон по маске.

Рассмотрим способ через обработчик событий. Данный код добавляет исключение если в полях найдено слово ‘http’, при помощи которого так любят спам боты указывать ссылки на свои сайты. Давайте взглянем на него детальней

AddEventHandler('form', 'onBeforeResultAdd', 'my_onBeforeResultAdd');
function my_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;
	}
}

Исключение добавляется при помощи $APPLICATION->ThrowException(). Вы также можете усложнить логику применив проверку на $WEB_FORM_ID.

А какие способы борьбы со спамом знаете вы? Обязательно поделитесь ими с остальными в комментариях 🙂

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru

Пишите, отвечу на любые вопросы.
E-mail: dmitriyribka@gmail.com

2 комментария

  1. Здравствуйте!
    Я правильно понял, что данный код необходимо добавить в /bitrix/init.php?

    1. Здравствуйте, всё верно, только путь будет либо /bitrix/php_interface/ либо /local/php_interface/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *