Мои методы борьбы со спамом в веб-формах Vtiger

Мои методы борьбы со спамом в веб-формах Vtiger

В vtiger есть интересный модуль, называется Webforms. Он может сгенерировать специальные html-формы, которые затем вы можете спокойно вставить на свой сайт и получать лиды напрямую в vtiger. Формы можно синтегрировать с различными модулями - лиды, контакты, контрагенты, сделки.

В vtiger есть интересный модуль, называется Webforms. Он может сгенерировать специальные html-формы, которые затем вы можете спокойно вставить на свой сайт и получать лиды напрямую в vtiger. Формы можно синтегрировать с различными модулями - лиды, контакты, контрагенты, сделки.

Но в этом инструменте есть один недостаток - возможность попадания спама. В Vtiger для этого разработана интеграция с ReCaptcha. Но не всегда она работает из коробки и не всех она устраивает. Если клиент хочет оставить заявку на сайте, то наличие капчи может просто отпугнуть его.

Я вижу несколько способов защитить форму от ботов.

Один из вариантов - использование honeypot.

Делается это следующим образом. В форму вы добавляете скрытое поле, напирмер:

<input type="text" class="hot" value="">

И через класс hot регулируете видимость поля, скрывая его со страницы. Я не рекомендую использовать hidden, лучше провести скрытие через стили.

Таким образом у вас на экране появится дополнительное скрытое поле, но которое будет доступно ботам. Боты будут думать, что это какое-то важное поле, связанное с именем и будут вставлять в него значения.

Теперь нам остаётся на уровне Vtiger проверять, заполнено ли даннео поле или нет. И если оно не пустое, мы будем считать заявку спамом. Для этого нам потребуется отредактировать файл:

modules/Webforms/capture.php

И после этих строчек:

$moduleLanguageStrings = Vtiger_Language_Handler::getModuleStringsFromFile($currentLanguage);

vglobal('app_strings', $moduleLanguageStrings['languageStrings']);

 

Вставляем наш код по проверки поля:

//honey pot field

        $honeypot = $request['unname'];

$returnURL = false;

try {

            //check if the honeypot field is filled out. If not, send a mail.

            if( $honeypot != '' ){

                throw new Exception ('Sorry, but we blocked your request due to antispam policy');

                return; //you may add code here to echo an error etc.

            }

 

Таким образом, мы можем защитить нашу форму от программных ботов. А это более 60% спама. Для более надёжной защиты я рекомендую использовать капчу.