Битрикс. Защита регистрации от спамеров — stopforumspam.


Буквально задолбали один сайт с авто-регистрацией новых пользователей! (благо в форум не срут).
Тем не менее — капчу уже завернул до неузнаваемости — всё равно прошибают!

Готовых бесплатных (этого клиента «качать» на деньги — долго и нудно) решений на маркетплейсе не нашел — самому что-то ваять честно — лень!
Нашел решение, очень симпатичное мне по его установке (по работе проверим) — вся статья Битрикс: защита форм от спамеров. Подключаем stopforumspam

Элегантность решения — в отсутствии какой либо кастомизации — всё сделано на основе хука

AddEventHandler("main", "OnBeforeUserRegister", Array("XUser", "BeforeRegister"));

Перед регистрацией пользователя отсылаем на проверку к stopforumspam его IP, имя, email — если сервису что-то не понравилось, возвращает false — регистрацию прерываем.

Соответственно, в файл /bitrix/php_interface/init.php добавляем


require_once ($_SERVER["DOCUMENT_ROOT"].'/bitrix/components/tools/tools.php');

AddEventHandler("main", "OnBeforeUserRegister", Array("XUser", "BeforeRegister"));

class XUser {
function BeforeRegister(&$arFields) {
$spambot = checkSpambots($arFields['EMAIL'], $arFields['USER_IP'], $arFields['NAME']);
if ($spambot == true) {
$GLOBALS['APPLICATION']->ThrowException('Registration is forbidden for you. Send abuse to the administrator
Вам регистрация запрещена. Обратитесь к администратору');
return false;
}
}
}

Не забыв создать ./bitrix/components/tools/tools.php с содержимым


appears == 'yes') {
$spambot = true;
}
}
if($ip!='' and $spambot===false) {
//e-mail not found in the database, now check the ip
$xml_string = file_get_contents('http://www.stopforumspam.com/api?ip=' . $ip);
$xml = new SimpleXMLElement($xml_string);
if ($xml->appears == 'yes') {
$spambot = true;
}
}
if($name!='' and $spambot===false) {
$xml_string = file_get_contents('http://www.stopforumspam.com/api?username=' . $name);
$xml = new SimpleXMLElement($xml_string);
if ($xml->appears == 'yes') {
$spambot = true;
}
}
if ($spambot == true) {
if (file_exists($dir . $ip . '.txt')) {
$spambot_old_info = file_get_contents($dir . $ip . '.txt');
$spambot_old_info = explode(',', $spambot_old_info);
$spambot_old_info[2] = $spambot_old_info[2] + 1;
$spambot_old_info = implode(',', $spambot_old_info);
file_put_contents($dir . $ip . '.txt', $spambot_old_info);
} else {
$spambot_info = $ip . ',' . $name . ',1';
file_put_contents($dir . $ip . '.txt', $spambot_info);
}
}
return $spambot;
}


Один комментарий на «“Битрикс. Защита регистрации от спамеров — stopforumspam.”»

  1. А вот решение подсказано на форуме:
    http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic56713/message297963/?result=edit#message297963
    Можно использовать обработчик на событие — http://dev.1c-bitrix.ru/api_help/main/events/onbeforeuserregister.php
    там классные примеры: Николай Гнусов 11.02.2009 14:23:16
    Делаем возможность регистрации поля Логин только латинскими буквами и цифрами.
    А вот мое решение:
    // + Егоров 2013-09-02
    // ссылка http://dev.1c-bitrix.ru/api_help/main/events/onbeforeuserregister.php
    // файл /bitrix/php_interface/init.php
    // добавляем обработчик события при регистрации
    AddEventHandler(«main», «OnBeforeUserRegister», «OnBeforeUserRegisterHandler»);
    // а заодно и при обновлении данных пользователем
    AddEventHandler(«main», «OnBeforeUserUpdate», «OnBeforeUserRegisterHandler»);

    // описываем саму функцию
    function OnBeforeUserRegisterHandler($args)
    {
    if ($args[‘NAME’] == $args[‘LAST_NAME’])
    {
    $GLOBALS[‘APPLICATION’]->ThrowException(‘Имя не должно совпадать с фамилией.’);
    return false;
    }
    return true;
    }
    // — Егоров 2013-09-02
    теперь надо добавить или имя или ФИО только на русском и будет счастье…. Сделал чтобы в имени была кирилица!!! ПОсмотрим, если что усилим!
    =========================================================================
    // + 2013-09-02
    // ссылка http://dev.1c-bitrix.ru/api_help/main/events/onbeforeuserregister.php
    // файл /bitrix/php_interface/init.php
    // добавляем обработчик события при регистрации
    AddEventHandler(«main», «OnBeforeUserRegister», «OnBeforeUserRegisterHandler»);
    // а заодно и при обновлении данных пользователем
    AddEventHandler(«main», «OnBeforeUserUpdate», «OnBeforeUserRegisterHandler»);

    // описываем саму функцию
    function OnBeforeUserRegisterHandler($args)
    {
    if ($args[‘NAME’] == $args[‘LAST_NAME’])
    {
    $GLOBALS[‘APPLICATION’]->ThrowException(‘Имя не должно совпадать с фамилией.’);
    return false;
    }
    if ( preg_match(«/^[-a-zA-Z0-9_]+$/», $args[‘NAME’]) )
    {
    $GLOBALS[‘APPLICATION’]->ThrowException(‘В имени должны быть русские буквы.’);
    return false;
    }

    return true;
    }
    // — 2013-09-02

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

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