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('Проверка на антиспам не пройдена!');
}
}
Метод возможно не так хорош как те же капчи от Гугла, но имеет место быть.