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