26.11.2021
Как сделать без добавления визуальной Captcha проверку на спам-ботов в формах. Т.е. чтобы для пользователей в форме ничего не добавилось, но при этом фильтрация спама была.
Добавляем в шаблон нашей формы (template.php) два инпута типа text и скрываем их CSS стилями, чтобы простые пользователи их не видели, а спам-боты при заполнении формы видели.
После добавляем обработчик события перед запоминанием результат формы и в нем проверяем заполненность этих полей. Заполнены - скорее всего это робот, выдаём исключение, результаты формы не сохраняется.
// этот обработчик можно добавить например в init.php AddEventHandler('form', 'onBeforeResultAdd', 'antiSpam'); function antiSpam($WEB_FORM_ID, &$arFields, &$arrVALUES) { global $APPLICATION; if (isset($_REQUEST["ANTI_SPAM"]) && $_REQUEST["ANTI_SPAM_VALUE"] !== "") { $APPLICATION->ThrowException('Проверка на антиспам не пройдена!'); } }
Метод возможно не так хорош как те же капчи от Гугла, но имеет место быть.