решено Суперантиспам

zxc

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

В 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
В 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

Также нужно создать закрытый форум, который может просматривать только админ и в этом форуме создать тему. Ну и указать id этого форума и темы вместо
$post['forum_id'] = 230;
$topic_id = 16509;


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

Dr_Brown

Пользователь
#2
А что в форуме дублируются сообщения это юзера, или как, просто просматриваешь заходишь?

А если ссылка по теме?
 
Последнее редактирование:

Dr_Brown

Пользователь
#3
Вообще расскажите как бан работает, как банить правильно, у нас есть

деактивровать юзера в профиле
забанить по нику
забанить по ip

что из этого делать, и что значит бан по UID
 

zxc

Пользователь
#4
Создаем новый форум с правами доступа только для админа. В форуме создаем одну закрепленную тему. В коде прописываем айдишники на этот форум и тему

Пользователь со стажем <30 дней пишет сообщение или создает тему в которой будет хоть одна ссылка автоматически попадает в бан лист а также его профиль деактивируется.

Его сообщения и темы попадают в созданный нами закрытый форум

А что в форуме дублируются сообщения это юзера, или как, просто просматриваешь заходишь?

А если ссылка по теме?
Сообщения не дублируются, а подменяется forum_id и topic_id и все посты уходят в наш закрытый форум, как писал выше.

Обычно новички не оставляют ссылок по теме, а заходят только нагадить
 
Последнее редактирование:

Dr_Brown

Пользователь
#5
zxc что бы юзер не мог писать сразу после бана, его нужно разлогинить автоматически, путем обнуления его сессии. Делал когда то уже блин не помню как.
 

Dr_Brown

Пользователь
#7

$inactive = 900; // 60*15 = минут
if(isset($_SESSION['id']) ) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
header("Location: logout.php");
}


вот так делал, когдато, на одной из ферм, тока тут по времени выбрасывала, за неактивность.

вообщем шото типа такого надо прикрутить
 

Kryl

Пользователь
#8
Мне вот интересно , откуда UID берете ?
UID вроде же это id сетевой карты или что то подобное , браузер UID не может дать , только через приложение , как в BF4 , там punkbuster ...
Хотя может что то и путаю .
 
Сверху