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

Судя по проектам реализованных на 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 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

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

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

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

  2. Здравствуйте.
    А какое пользовательское поле добавить. Немного не разобрался. «BeforeResultAdd» или другое? я так понимаю в пользовательских полях в админке. или в модуле регистрации?

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

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

#SaveUkraine