[dev] Антиспамер

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
DedPichto
phpBB 1.4.4
Сообщения: 104
Зарегистрирован: 12.02.2005 13:11

Сообщение DedPichto » 12.09.2005 15:47

Нет, все же работает не совсем так, как я описывал. Вернее, совсем не так - зря на меня дяденька Xpert наехал.

Если вбить в

Код: Выделить всё

$ad_list=array
http, то мод действительно не пропускает сообщения от гостей и пользователей с кол-вом сообщений меньше указанного в конфиге, содержащие гиперссылку.

НО! То же самое он делает С ЛЮБЫМИ сообщениями, содержащими гиперссылку от ЛЮБЫХ зарегистрированных пользователей с любым количеством сообщений. Просто первых он банит/деактивирует, а вторых - нет. Но сообщения не пропускает.

Ивaн

Сообщение Ивaн » 29.11.2005 16:20

Я так и не понял, что делает мод! Люди объясните... php-команды мне ни о чем не говорят. Я в этом не рублю.

Я не хочу никого банить, а только автоматически блокировать сообщение, содержащие фразу "заработай много денег". Куда я должен ввести эту фразу?

Код: Выделить всё

$ad_minpost=4; // До этого числа баним, свыше только информируем Админа и забиваем спам 
Что здесь сделать?

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 29.11.2005 16:37

Ивaн писал(а):Куда я должен ввести эту фразу?
Егор Наклоняев писал(а):$ad_list=array('http://cernis.cz');
Ивaн писал(а):Что здесь сделать?
Написано же
Егор Наклоняев писал(а):$ad_minpost=4; // До этого числа баним, свыше только информируем Админа и забиваем спам
Пишите 0 и банить не будет, будет только забивать.
я люблю daft punk | новый sugoi.ru

Ивaн

Сообщение Ивaн » 30.11.2005 1:24

Проблема:
я пробовал ставить и 0 и 6, а результат один и тот же: "Вы забанены" и далее сверху кучу ошибок:

Код: Выделить всё

Warning: message_die(./language/lang_russian/lang_main.php): failed to open stream: No such file or directory in /home/repairp3/public_html/includes/functions.php on line 629

Warning: message_die(): Failed opening './language/lang_russian/lang_main.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/repairp3/public_html/includes/functions.php on line 629

Warning: Cannot modify header information - headers already sent by (output started at /home/repairp3/public_html/includes/functions.php:629) in /home/repairp3/public_html/includes/page_header.php on line 597

Warning: Cannot modify header information - headers already sent by (output started at /home/repairp3/public_html/includes/functions.php:629) in /home/repairp3/public_html/includes/page_header.php on line 599

Warning: Cannot modify header information - headers already sent by (output started at /home/repairp3/public_html/includes/functions.php:629) in /home/repairp3/public_html/includes/page_header.php on line 600
в чем моя ошибка?

у забаннеого IP постоянно эит ошибки, а у других IP всё нормально. Снимаю бан и тоже становится все норм.

Необходимо чтобы пост забивался (выдавалось типа "пост не прошел, т.к. в нем реклама") и на е-мейл ничего не отсылалось. С настройками текста в lang_main.php все легко, а с php самостоятельно не разберусь.

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 30.11.2005 8:10

Ивaн писал(а):в чем моя ошибка?
Ивaн писал(а):in /home/repairp3/public_html/includes/functions.php on line 629
я люблю daft punk | новый sugoi.ru

Ивaн

Сообщение Ивaн » 30.11.2005 9:26

кое-как методом тыка разобрался с ошибкой : :wink:
VVVas писал(а):Написано же
Егор Наклоняев писал(а):$ad_minpost=4; // До этого числа баним, свыше только информируем Админа и забиваем спам
Пишите 0 и банить не будет, будет только забивать.
я писал и $ad_minpost=0; и $ad_minpost=6; и $ad_minpost=9; и все равно банит! Почему???

Аватара пользователя
avm
Former team member
Сообщения: 582
Зарегистрирован: 16.01.2005 10:40
Откуда: Москва

Сообщение avm » 30.11.2005 10:03

Ивaн писал(а):$ad_minpost=0;
из кода самого мода ясно, что это некое пороговое число постов юзера, на основании которого принимается решение как его наказывать. Если число постов юзера меньше этого числа - его банят, если больше - просто вырезают из сообщения запрещенный текст и высылают админу е-майл.
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948

Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Зарегистрирован: 13.03.2004 21:27
Поблагодарили: 2 раза
Контактная информация:

Сообщение Xpert » 30.11.2005 10:14

После

Код: Выделить всё

function ad_cerber($message) 
{
Добавить

Код: Выделить всё

global $ad_minpost, $ad_replace, $ad_list;
Так должно заработать.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений

Аватара пользователя
avm
Former team member
Сообщения: 582
Зарегистрирован: 16.01.2005 10:40
Откуда: Москва

Сообщение avm » 30.11.2005 10:18

Xpert, мда... столько времени прошло, а никто внимание и не обратил...
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948

Ивaн

Сообщение Ивaн » 30.11.2005 17:53

Я считаю, что самый эффективный способ борьбы со спамерами - это использование трех модов:
1. Запрет на регистрацию с урл.
2. Запрет на создание сообщения с определенным текстом. На данный момент 90% спам сообщений содержат одинковые характерные фразы. В моем случае это фразы про пирамиды, армию, рекламы в форумах, оптимизация, каталоги прокси, недвижимость и др. (не так много, но уж очень часто повторяются)
3. Удаление мертвых пользователей не оставивших ниодного сообщения и не заходивших на форум более 3-х месяцев. Так удалятся все логины без урл оставленные ботами + реальные, но совершенно неактивные пользователи.

В итоге останется менее 3% всего спама, но тут уже надо ручками... :)


Первый сделал без проблем, а вот со вторым никак не могу разобраться. За третий еще не приступал. Неужели никто не ставил себе второй мод?

Xpert, как должно быть?

Так (первый вариант):

Код: Выделить всё

// This function check message for SPAM 
function ad_cerber($message) 
{ 
global $ad_minpost, $ad_replace, $ad_list;
   global $userdata,$phpEx, $phpbb_root_path,$user_ip,$db,$board_config; 
   if( $userdata['user_level'] == ADMIN ) return $message; 
    include($phpbb_root_path . 'includes/adcerber_config.'.$phpEx); 
или так (второй вариант):

Код: Выделить всё

// This function check message for SPAM 
function ad_cerber($message) 
{ 
   global $ad_minpost, $ad_replace, $ad_list, $userdata,$phpEx, $phpbb_root_path,$user_ip,$db,$board_config; 
   if( $userdata['user_level'] == ADMIN ) return $message; 
    include($phpbb_root_path . 'includes/adcerber_config.'.$phpEx); 
я пробовал и так и так.... все равно меня банит.
В adcerber_config.php такие строки:

Код: Выделить всё

<?php 
$ad_minpost=0; // До этого числа баним, свыше только информируем Админа и забиваем спам 
$ad_replace='[SPAM]';
$ad_list=array('откос от армии'); 
?>
Я создаю топик с текстом "откос от армии" и меня банят... А банить не должно! а то так все подряд айпишки без толку перебанит...

Аватара пользователя
Romiyo
Неадекватен
Сообщения: 603
Зарегистрирован: 16.12.2004 10:36
Откуда: tln.ee
Контактная информация:

Сообщение Romiyo » 30.11.2005 19:45

Ивaн писал(а):1. Запрет на регистрацию с урл.
это как? на сегодняшний день 85% спамеров на форуме - это боты. Убирание поля ВВВ при регистрации не спасёт, ибо боты беспрепятственно вписывают туда свой "мега-сайт"
Ивaн писал(а):2. Запрет на создание сообщения с определенным текстом. На данный момент 90% спам сообщений содержат одинковые характерные фразы. В моем случае это фразы про пирамиды, армию, рекламы в форумах, оптимизация, каталоги прокси, недвижимость и др. (не так много, но уж очень часто повторяются)
гиморой тот ещё. Один и тот же текст можно написать хоть тысячу раз и забанен ты не будешь - дело в смене раскладке клавиатуры в словах
Ивaн писал(а):3. Удаление мертвых пользователей не оставивших ниодного сообщения и не заходивших на форум более 3-х месяцев. Так удалятся все логины без урл оставленные ботами + реальные, но совершенно неактивные пользователи.
бред. Бот или спамер может зарегаться сегодня, а сменить свои данные и запостить мессагу через неделю-две. В результате, пока пройдёт 2.5 месяца, он уже однимется за ваш счёт в поисковике. + Некоторые крендели будут ещё и зарабатывать на вас денюжки - много раз встречал темы типа: "заспамь все форумы рунета! дай ссылку а твой спам! Ссылка должна прожить как минимум 2-3-...-... дня и ты получишь $"

В итоге останется только повеситься от такой борьбы со спамерами.
Неадекватен

Ивaн

Сообщение Ивaн » 01.12.2005 21:59

Важно то, что это делается для форума с узкой тематикой.
1. Запрет не на урл, а на регистрацию с урл. Т.е. я убираю поле "урл" и мод автоматически болкирует всех, кто пытается указать урл. Мод работает уже не первый месяц и спам форума сократился на 45% - столько ботов пытается оставить в личных данных свой урл.
2. Спамеру нет смысла заниматься раскладкой клавиатуры, т.к. в СПАМе главную роль играют поисковики.
3. Если бот зарегится без урл (пропускается 1-ый мод) и оставляет уникальное-нестандратное сообщение (пропускается 2-ой мод), то пользватель со своей рекламой удаляется ручками. Но, если же он специально ручками оставил одно тематическое сообщение ради сохранения рекламы в поле "Интересы", то флаг ему в руки и барабан на шею, т.к. "профили" на нашем форуме вообще закрыты к индексации :twisted: !!!

Люди, ответьте, пожалуйста, на мой вопрос. (см. выше)

Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Зарегистрирован: 13.03.2004 21:27
Поблагодарили: 2 раза
Контактная информация:

Сообщение Xpert » 01.12.2005 22:02

Ивaн писал(а):$ad_minpost=0;
Что под гостем, что регистрированных - при значении 0 будет банить. Чтобы не банило, чило должно быть больше нуля.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений

Аватара пользователя
avm
Former team member
Сообщения: 582
Зарегистрирован: 16.01.2005 10:40
Откуда: Москва

Сообщение avm » 01.12.2005 22:10

Или поставить "$ad_minpost=-1;" тогда кол-во постов юзера вообще не будет приниматься во внимание...
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948

Ивaн

Сообщение Ивaн » 02.12.2005 14:59

Пишите 0 и банить не будет, будет только забивать.
Чтобы не банило, чило должно быть больше нуля.
Или поставить "$ad_minpost=-1;" тогда кол-во постов юзера вообще не будет приниматься во внимание...
ставил и -1 и 0 и 2 и 9 - все равно банит :!: Почему??? :(

Может допущена какая-то глупая ошибка. Я делал следующее:

1. В includes\ создал файл adcerber_config.php. Может здесь ошибка?

Код: Выделить всё

<?php 
$ad_minpost=0; // До этого числа баним, свыше только информируем Админа и забиваем спам 
$ad_replace='[SPAM]';
$ad_list=array('армия'); 
?>
2. В папке language/lang_russian/email создал ad_cerber.tpl.
Письма приходят на е-мейл привильно. Но хотелось бы вообще отключить это уведомление, а то по 20 писем в день придется удалять.

3. В файле language/lang_russian/lang_main.php
все нормально работает. Руссифицировано.

4. Открыть includes\functions_post.php
здесь сделал изменения:

Код: Выделить всё

	// Check message
	if (!empty($message))
	{
		$bbcode_uid = ($bbcode_on) ? make_bbcode_uid() : '';
		$message=ad_cerber($message);
		$message = prepare_message(trim($message), $html_on, $bbcode_on, $smilies_on, $bbcode_uid);
	}
и в самом конце такой фрагмент (захватил кусок предыдущего кода):

Код: Выделить всё

		include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
	}
}

// This function check message for SPAM 
function ad_cerber($message) 
{ 
   global $userdata,$phpEx, $phpbb_root_path,$user_ip,$db,$board_config; 
   if( $userdata['user_level'] == ADMIN ) return $message; 
    include($phpbb_root_path . 'includes/adcerber_config.'.$phpEx); 
    $clear=str_replace($ad_list,$ad_replace,$message); 
    if($clear==$message) return $message; // OK. No AD or SPAM 
    $mustdie=false; 
    if( !$userdata['session_logged_in'] ) 
   { 
        $sql = "INSERT INTO " . BANLIST_TABLE . " (ban_ip) 
            VALUES ('" . $user_ip . "')"; 
      if ( !$db->sql_query($sql) ) 
      { 
         message_die(GENERAL_ERROR, "Couldn't insert ban_ip info into database", "", __LINE__, __FILE__, $sql); 
      } 
      $sql = "DELETE FROM " . SESSIONS_TABLE . " 
         WHERE session_ip ='$user_ip'"; 
      if ( !$db->sql_query($sql) ) 
      { 
         message_die(GENERAL_ERROR, "Shit happens"); 
      } 
        $mustdie=true; 
   } 
   else 
   { 
     if($userdata['user_posts']>$ad_minpost)$mustdie=false; 
     else { 
        $user_id=$userdata['user_id']; 
        $sql = "UPDATE " . USERS_TABLE . " SET user_active=0 
            WHERE user_id=$user_id"; 
      if ( !$db->sql_query($sql) ) 
      { 
         message_die(GENERAL_ERROR, "Couldn't change user status", "", __LINE__, __FILE__, $sql); 
      } 
      $sql = "DELETE FROM " . SESSIONS_TABLE . " 
         WHERE  session_user_id=$user_id"; 
      if ( !$db->sql_query($sql) ) 
      { 
         message_die(GENERAL_ERROR, "Shit happens"); 
      } 
        $mustdie=true; 
      } 
   } 
    include($phpbb_root_path . 'includes/emailer.'.$phpEx); 
    $emailer = new emailer($board_config['smtp_delivery']); 
    $emailer->from($board_config['board_email']); 
    $emailer->replyto($board_config['board_email']); 
    $emailer->use_template('ad_cerber', $board_config['default_lang']); 
    $emailer->email_address($board_config['board_email']); 
    $emailer->set_subject('AD Cerber report'); 
    $emailer->assign_vars(array( 
    'SITENAME' => $board_config['sitename'], 
    'MESSAGE' => $message, 
    'ACTION'=>($mustdie)?'***USER BANNED***':'', 
    'USERNAME' => $userdata['username'], 
    'IP' =>  decode_ip($user_ip))); 
     $emailer->send(); 
     $emailer->reset(); 
     if(!$mustdie) return $clear; 
     if($userdata['session_logged_in']) message_die(CRITICAL_MESSAGE, 'You_been_blocked'); 
     message_die(CRITICAL_MESSAGE, 'You_been_banned'); 
} 

?>

Закрыто

Вернуться в «Бета-версии модов для phpBB 2.0.x»