Битрикс – защита от регистрации ботов

Если стандартные способы защиты от регистрации ботов, описанные на многих сайтах, не помогают. Например: Пример 1, Пример 2

Предлагаю рассмотреть следующий способ. По ищем через какую форму боты пытаются зарегистрироваться. Для этого в конц файла init.php обычно расположенному по пути /local/php_interface/ добавим следующий код:

$file_post = $_SERVER["DOCUMENT_ROOT"] . "/logs/post.log";
$url = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$ip = $_SERVER['REMOTE_ADDR'];


if (!empty($_POST)) {
    $fw = fopen($file_post, "a");
    fwrite($fw, "\n-------------\n");
    fwrite($fw, "POST " . var_export($_POST, true) . "\n");
    fwrite($fw, $url . "\n");
    fwrite($fw, $ip . "\n");
    fwrite($fw, "\n-------------\n");
    fclose($fw);
}

Данный код будет логировать все POST запросы на сайте. А так же ip адрес с которого был вызвал запрос и путь на сайте где запрос был вызван. Далее ждём следующего бота и проверяем логи. В моём случае POST запрос выглядел так:

Теперь мы понимаем с как происходит регистрация ботов. Самый простой способ тут будет добавить ip в стоп-лист про активного фильтра. Или можно поискать другие закономерности. Например, мой бот, для заполнения поля использует одни и тот же номер телефона +1 213 425 1453

AddEventHandler("main", "OnBeforeUserAdd", array("MyUserAddHandler", "OnBeforeUserAddHandler"));

class MyUserAddHandler {
    function OnBeforeUserAddHandler(&$arFields) {
        if ($arFields["PERSONAL_PHONE"] == "+1 213 425 1453") {
            global $APPLICATION;
            //$APPLICATION->throwException("Ботам здесь не рады.");
            return false;
        }
    }
}

Проверяем на совпадение при регистрации нового пользователя и выдаём ошибку

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *