Ответить в теме

Нашел наконец для себя самый оптимальный вариант борьбы со спамерами :eek: Суть в том что баним IP и UID пользователей со стажем меньше месяца которые запостили ссылку в теме или ответе


[SPOILER="click"]В posting.php перед  submit_post(.............

[PHP]

///////ANTISPAM

$is_spammer =  false;

if(

    !empty($message) AND

    ($userdata['user_id']>1) AND

    (time()-$userdata['user_regdate'])<(60*60*30)

){

    $is_spammer = (stristr($message.$post_subject,'http://') OR stristr($message.$post_subject,'https://')) ? true : false;


}


//\\\\\ANTISPAM




//////ANTISPAM

if($is_spammer){

    if ($mode=='newtopic')

    {

        $forum_id = 230;  

    }  

    if ($mode=='editpost' OR $mode=='reply')

    {

        $forum_id = 230;

        $topic_id = 16509;

    }

  

    $sql = "UPDATE " . BB_USERS . " SET user_active='0' WHERE user_id=".$userdata['user_id'];

    if ( !DB()->sql_query($sql) )

    {

        message_die(GENERAL_ERROR, "Couldn't insert uid info into database", "", __LINE__, __FILE__, $sql);

    }

  

    $sql = "INSERT INTO " . BB_BANLIST . " (ban_ip)

                VALUES ('" . $userdata['user_last_ip'] . "')";

    if ( !DB()->sql_query($sql) )

    {

        message_die(GENERAL_ERROR, "Couldn't insert ban_ip info into database", "", __LINE__, __FILE__, $sql);

    }  

  

  

    $sql = "INSERT INTO " . BB_BANLIST . " (ban_userid) VALUES (" . $userdata['user_id'] . ")";

    if ( !DB()->sql_query($sql) ){

        message_die(GENERAL_ERROR, "Couldn't insert ban_userid info into database", "", __LINE__, __FILE__, $sql);

    }  

}

//\\\\\ANTISPAM

[/PHP]


В ajax/posts.php перед DB()->sql_query("INSERT INTO " . BB_POSTS.......................

[PHP]

///////ANTISPAM

$is_spammer =  false;

if(

    !empty($message) AND

    ($userdata['user_id']>1) AND

    (time()-$userdata['user_regdate'])<(60*60*30)

){

    $is_spammer = (stristr($message,'http://') OR stristr($message,'https://')) ? true : false;

}


//\\\\\ANTISPAM




//////ANTISPAM

if($is_spammer){

  

    $post['forum_id'] = 230;

    $topic_id = 16509;


  

    $sql = "UPDATE " . BB_USERS . " SET user_active='0' WHERE user_id=".$userdata['user_id'];

    if ( !DB()->sql_query($sql) )

    {

        message_die(GENERAL_ERROR, "Couldn't insert uid info into database", "", __LINE__, __FILE__, $sql);

    }

  

    $sql = "INSERT INTO " . BB_BANLIST . " (ban_ip)

                VALUES ('" . $userdata['user_last_ip'] . "')";

    if ( !DB()->sql_query($sql) )

    {

        message_die(GENERAL_ERROR, "Couldn't insert ban_ip info into database", "", __LINE__, __FILE__, $sql);

    }  

  

  

    $sql = "INSERT INTO " . BB_BANLIST . " (ban_userid) VALUES (" . $userdata['user_id'] . ")";

    if ( !DB()->sql_query($sql) ){

        message_die(GENERAL_ERROR, "Couldn't insert ban_userid info into database", "", __LINE__, __FILE__, $sql);

    }  

}

//\\\\\ANTISPAM

[/PHP][/SPOILER]


Также нужно создать закрытый форум, который может просматривать только админ и в этом форуме создать тему. Ну и указать id этого форума и темы вместо

$post['forum_id'] = 230;

$topic_id = 16509;



Но. После того как юзер попадает в банлист, он по прежнему может постить сообщения пока не разлогинится. Так что можно добавить проверку бан листа перед постингом юзером сообщения


Сверху