Автоматические боты постоянно слоняются по интернету и пытаются залезть во все щели. Сегодня мы заткнем еще 1 дыру.

Для этого идем в init.php и добавляем следующий код


\Bitrix\Main\EventManager::getInstance()->addEventHandler("main", "OnEndBufferContent", "OnEndBufferWebFormAntiSpam");
function OnEndBufferWebFormAntiSpam(&$content)
{
    // Добавляем стили перед head
    $xStyle  = '<style>.xname{display:block;height:.1px;margin:0!important;overflow:hidden;padding:0!important;width:.1px;border:0;opacity:.01;}</style>'; // Стили для поля
    $content = str_ireplace('</head>', $xStyle.'</head>',  $content);
    // Добавляем поля
    $findField = '<input type="hidden" name="WEB_FORM_ID"'; // У всех веб-форм есть это поле (Должно быть)
    $xField = '<input class="xname name" tabindex="-1"  autocomplete="off" type="text" name="last_name" value="">'; // Максимально завлекающее ботов поля с утыканными name
    $xField .= $findField;
    // Добавляем к найденому полю вебформы наше поле
    $content = str_ireplace($findField, $xField, $content); 
    return $content;
}

\Bitrix\Main\EventManager::getInstance()->addEventHandler('form', 'onBeforeResultAdd', 'onBeforeResultAddWebFormAntiSpam');
function onBeforeResultAddWebFormAntiSpam($WEB_FORM_ID, &$arFields, &$arrVALUES){
    global $APPLICATION;
    // Проверяем поле на заполненость
    if(!empty($arrVALUES['last_name'])){
        $APPLICATION->ThrowException('Хм... ты точно не робот?');
    }
}

Суть данного метода сводится к тому что мы вставляем фейковые поля, при заполнении которых происходит блокировка действия.

Готовы сделать всю работу за Вас
от500
  • 30 минут


Поработаем?

Опишите свой запрос, мы расчитаем стоимость вашей задачи.