Судя по проектам реализованных на 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.
А какие способы борьбы со спамом знаете вы? Обязательно поделитесь ими с остальными в комментариях 🙂
Здравствуйте!
Я правильно понял, что данный код необходимо добавить в /bitrix/init.php?
Здравствуйте, всё верно, только путь будет либо /bitrix/php_interface/ либо /local/php_interface/
Спасибо, помогло!
Здравствуйте.
А какое пользовательское поле добавить. Немного не разобрался. “BeforeResultAdd” или другое? я так понимаю в пользовательских полях в админке. или в модуле регистрации?