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

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

Сообщение DedPichto 12.09.2005 14:47

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

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

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


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

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

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

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


Что здесь сделать?
Ивaн

 

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

Ивaн писал(а):Куда я должен ввести эту фразу?

Егор Наклоняев писал(а):$ad_list=array('http://cernis.cz');


Ивaн писал(а):Что здесь сделать?

Написано же
Егор Наклоняев писал(а):$ad_minpost=4; // До этого числа баним, свыше только информируем Админа и забиваем спам

Пишите 0 и банить не будет, будет только забивать.
вы нарушили правила конференции, объяснений не будет - сами читайте правила
я люблю daft punk | Активные темы
Аватара пользователя
VVVas
Люмпен Пролетариат
Люмпен Пролетариат
 
Сообщения: 4558
Зарегистрирован: 12.11.2004 0:20
Откуда: RU-MSK

Сообщение Ив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 самостоятельно не разберусь.
Ивaн

 

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

Ивaн писал(а):в чем моя ошибка?

Ивaн писал(а):in /home/repairp3/public_html/includes/functions.php on line 629
вы нарушили правила конференции, объяснений не будет - сами читайте правила
я люблю daft punk | Активные темы
Аватара пользователя
VVVas
Люмпен Пролетариат
Люмпен Пролетариат
 
Сообщения: 4558
Зарегистрирован: 12.11.2004 0:20
Откуда: RU-MSK

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

кое-как методом тыка разобрался с ошибкой : :wink:

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

Пишите 0 и банить не будет, будет только забивать.

я писал и $ad_minpost=0; и $ad_minpost=6; и $ad_minpost=9; и все равно банит! Почему???
Ивaн

 

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

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

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

После
Код: Выделить всё
function ad_cerber($message)
{

Добавить
Код: Выделить всё
global $ad_minpost, $ad_replace, $ad_list;


Так должно заработать.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
 
Сообщения: 5637
Зарегистрирован: 13.03.2004 21:27
Откуда: msk.ru

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

Xpert, мда... столько времени прошло, а никто внимание и не обратил...
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948
Аватара пользователя
avm
phpBB 2.0.13
 
Сообщения: 613
Зарегистрирован: 16.01.2005 10:40
Откуда: Москва

Сообщение Ив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('откос от армии');
?>


Я создаю топик с текстом "откос от армии" и меня банят... А банить не должно! а то так все подряд айпишки без толку перебанит...
Ивaн

 

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

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

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

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

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

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

 

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

Ивaн писал(а):$ad_minpost=0;

Что под гостем, что регистрированных - при значении 0 будет банить. Чтобы не банило, чило должно быть больше нуля.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
 
Сообщения: 5637
Зарегистрирован: 13.03.2004 21:27
Откуда: msk.ru

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

Или поставить "$ad_minpost=-1;" тогда кол-во постов юзера вообще не будет приниматься во внимание...
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948
Аватара пользователя
avm
phpBB 2.0.13
 
Сообщения: 613
Зарегистрирован: 16.01.2005 10:40
Откуда: Москва

Сообщение Ив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');
}

?>
Ивaн

 

Пред.След.

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0