.
Место для Вашей рекламы
13 марта 2014

Битрикс. Защита регистрации от спамеров — 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<br>Вам регистрация запрещена. Обратитесь к администратору');
return false;
}
}
}

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

<?php
function checkSpambots($mail='', $ip='', $name='') {
$spambot = false;
$dir = $_SERVER["DOCUMENT_ROOT"].'/spambot/';

if($mail!=''){
$xml_string = file_get_contents('http://www.stopforumspam.com/api?email=' . $mail);
$xml = new SimpleXMLElement($xml_string);
if ($xml->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;
}

Яндекс.Метрика