Буквально задолбали один сайт с авто-регистрацией новых пользователей! (благо в форум не срут).
Тем не менее — капчу уже завернул до неузнаваемости — всё равно прошибают!
Готовых бесплатных (этого клиента «качать» на деньги — долго и нудно) решений на маркетплейсе не нашел — самому что-то ваять честно — лень!
Нашел решение, очень симпатичное мне по его установке (по работе проверим) — вся статья Битрикс: защита форм от спамеров. Подключаем 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.”»
А вот решение подсказано на форуме:
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