MyBB.fr, le portail francophone de MyBB

Version complète : [Gestion d'utilisateurs]Détecter les mauvais utilisateurs, les bots et autres
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Le script ci dessous sert à détecter via votre base de données les utilisateur potentiellement néfastes.

A savoir:
- Les utilisateurs d'adresses temporaires.
- Les utilisateurs ayant rentré un numero ICQ(Pour les bots)
- Les utilisateurs ayant rentré dans leur profil un site web(Pour les bots et autres)

Installation:
- Créer un fichier .php que vous placerez dans votre répertoire de base du forum.

Droits:
- Seul les Admins / Modo peuvent accéder à la page

Autres information:
- Vous pouvez modifier le script, il fait le minimum et sans fioritures...
- Je l'ais réalisé un soir de grande fatigue, je vais surement apporter des modifications quand quelques jours pour l'optimiser... !
Voila le script php:
Code PHP :
<?php
//********* ************************ *********
//********* Script réalisé par Tlams *********
//********* ************************ *********


echo "EMAIL INCORECTE:<br />";
//connection base
define('IN_MYBB'1);
require (
'global.php');
session_start(); 
//fin connection BD

$ID mysql_real_escape_string($mybb->user['uid']);
$sql1 "SELECT usergroup FROM mybb_users WHERE uid ='$ID'";
$req1 mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error()); 
$data1 mysql_fetch_array($req1);  
$groupe $data1[0];
if (
$groupe == "4" OR $groupe == "3" OR $groupe == "6" ){
?>
<table width="200" border="1"><tr><th scope="col">N°</th><th scope="col">N.d'inscription</th><th scope="col">Pseudo</th><th scope="col">email</th></tr>
<?
$nbs 
0;
$sql 'SELECT * FROM mybb_users WHERE usergroup!="7"'
$req mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while (
$data mysql_fetch_array($req)){    
$nbs1 $nbs++;    
$email $data['email'];
$uid $data['uid'];
$username $data['username'];
$arobase "@";
$email1 strstr($email,$arobase);
if (
$email1 == "@yopmail.com" OR $email1 == "@yopmail.fr" OR $email1 == "@tempomail.fr" ){
?>
<tr><td> <? echo $nbs1?> </td><td> <? echo $data['uid']; ?> </td><td> <? echo "<a href='member.php?action=profile&uid=$uid'>$username</a>"?> </td><td> <? echo $data['email']; ?> </td></tr>
<?
}}
?>
</table>
<br /><br />

EMAIL Bizare<br />
<table width="200" border="1"><tr><th scope="col">N°</th><th scope="col">N.d'inscription</th><th scope="col">Pseudo</th><th scope="col">email</th></tr>
<?
$nbs 
0;
$sql 'SELECT * FROM mybb_users WHERE usergroup!="7"'
$req mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while (
$data mysql_fetch_array($req)){    
$nbs1 $nbs++;    
$email $data['email'];
$uid $data['uid'];
$username $data['username'];
$arobase "@";
$email1 strstr($email,$arobase);
if (
$email1 != "@live.com" AND $email1 != "@hotmail.fr" AND $email1 != "@hotmail.com" AND $email1 != "@gmail.com" AND $email1 != "@live.fr"  AND $email1 != "@yahoo.com"  AND $email1 != "@yahoo.fr" AND $email1 != "@sfr.fr" AND $email1 != "@wanadoo.fr" AND $email1 != "@orange.fr" AND $email1 != "@free.fr" AND $email1 != "@laposte.net" AND $email1 != "@msn.com" AND $email1 != "@voila.fr"){
?>
<tr><td> <? echo $nbs1?> </td><td> <? echo $data['uid']; ?> </td><td> <? echo "<a href='member.php?action=profile&uid=$uid'>$username</a>"?> </td><td> <? echo $data['email']; ?> </td></tr>
<?
}}
?>
</table>
<br /><br />

EMAIL ICQ/WEB:<br />

<table width="200" border="1"><tr><th scope="col">N°</th><th scope="col">N.d'inscription</th><th scope="col">Pseudo</th><th scope="col">email</th><th scope="col">ICQ</th><th scope="col">WEB</th></tr>
<?
$nbs 
0;
$sql 'SELECT * FROM mybb_users WHERE (website!="" OR (icq!="0" AND icq!="")) AND usergroup!="7"'
$req mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while (
$data mysql_fetch_array($req)){    
$nbs1 $nbs++;    
$email $data['email'];
$uid $data['uid'];
$username $data['username'];

?>
<tr><td> <? echo $nbs1?> </td><td> <? echo $data['uid']; ?> </td><td> <? echo "<a href='member.php?action=profile&uid=$uid'>$username</a>"?> </td><td> <? echo $data['email']; ?> </td><td> <? echo $data['icq']; ?> </td><td> <? echo $data['website']; ?> </td></tr>
<?
}
mysql_free_result ($req);
mysql_close();
}
?>
</table> 



******************************************************
******************************************************
******************************************************




Dans le but de luter contre le muti-compte abusif, j'ai crée un script qui se base sur l'ip pour les détecter.
L’installation est la même que pour le précédant.
Pour des raisons d'économie de requêtes, la liste est mise à jour toutes les 24h et non à chaque actualisation de la page. (Via du cache php)
J'ai eu des problèmes avec mon hébergeurs a causes du nombres de requêtes et d'utilisation des serveurs mutualisé trop important...

Code PHP :
<?php
//********* ************************ *********
//********* Script réalisé par Tlams *********
//********* ************************ *********


//connection BDD
define('IN_MYBB'1);
require (
'global.php');
session_start(); 
//fin connection BDD

$ipcheacklist "cache/ipcheacklist.html";
$expire_ipcheacklist time() -60 
 
if(
file_exists($ipcheacklist) && filemtime($ipcheacklist) > $expire_ipcheacklist)
{
        
readfile($ipcheacklist);
        
}
else
{
        
ob_start(); 

$ID mysql_real_escape_string($mybb->user['uid']);
$sql1 "SELECT usergroup FROM mybb_users WHERE uid ='$ID'"//Corriger le préfixe de table si besoin 
$req1 mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error()); 
$data1 mysql_fetch_array($req1);  
$groupe $data1[0];
if (
$groupe == "4" OR $groupe == "3" OR $groupe == "6" ){  //Corriger numero groupe si besoin(Admin/modo/supermodo)
?>
<table width="800" border="1">
    <tr>
        <th scope="col">N°</th>
        <th scope="col">N.d'inscription</th>
        <th scope="col">Pseudo </th>
         <th scope="col">IP</th>
    </tr>
<?
$nbs 
0;
$sql 'SELECT lastip,count( * ),username,uid FROM mybb_users GROUP BY lastip HAVING count( * ) >1 ORDER BY `lastip` ASC';  //Corriger le préfixe de table si besoin 
$req mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while (
$data mysql_fetch_array($req)){    
$ip $data['lastip'];

$sql1 "SELECT username,uid,lastip,usergroup FROM mybb_users WHERE lastip = '$ip' ORDER BY `lastip` ASC ";  //Corriger le préfixe de table si besoin 
$req1 mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error());
while (
$data1 mysql_fetch_array($req1)){    
$nbs1 $nbs++;    
$username $data1['username'];
$uid $data1['uid'];
$usergroup $data1['usergroup'];
?>
<tr>
    <td> <? echo $nbs1?> </td>
    <td> <? echo $data1['uid']; ?> </td>
    <td> <? echo "<a href='member.php?action=profile&uid=$uid'>$username</a>"; if ($usergroup == 7) { echo " <b> Banni </b>"; } ?> </td>
    <td> <? echo $data1['lastip']; ?> </td>
</tr>
<?
}
mysql_free_result ($req1);
}
mysql_free_result ($req);
mysql_close();
}
?>
</table>
<?
 $ipcheackpage 
ob_get_contents(); 
        
ob_end_clean(); 
        
        
file_put_contents($ipcheacklist$ipcheackpage) ; 
        echo 
$ipcheackpage 
}
?>





NOUVEAU: Petit script pour surveiller les Mps des utilisateurs...
Note: comme les scripts précédant il vous faudra peut être éditer le nom des préfixe de table si ils sont différent. (mybb_users , mybb_privatemessages)
Code PHP :
<?php
//********* ************************ *********
//********* Script réalisé par Tlams *********
//********* ************************ *********


//connection base
define('IN_MYBB'1);
require (
'global.php');
session_start(); 
//fin connection BD

$ID mysql_real_escape_string($mybb->user['uid']);
$sql1 "SELECT usergroup FROM mybb_users WHERE uid ='$ID'";
$req1 mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error()); 
$data1 mysql_fetch_array($req1);  
$groupe $data1[0];
if (
$groupe == "4"){
?>

<table width="200" border="1"><tr><th scope="col">De</th><th scope="col">A</th><th scope="col">titre</th><th scope="col">Message</th></tr>
<?
$nbs 
0;
$sql 'SELECT toid,fromid,subject,message FROM mybb_privatemessages WHERE RIGHT(pmid,1) %2 = 1 ORDER BY pmid DESC LIMIT 500'
$req mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while (
$data mysql_fetch_array($req)){    
$toid $data['toid'];
$fromid $data['fromid'];
$subject $data['subject'];
$message $data['message'];
?>
<tr>
<td> <? echo "<a href='member.php?action=profile&uid=$fromid'>$fromid</a>"?>  </td>
<td> <? echo "<a href='member.php?action=profile&uid=$toid'>$toid</a>"?> </td>
<td> <? echo $subject?> </td>
<td> <? echo $message?> </td>
</tr>
<?
}
mysql_free_result ($req);
mysql_close();
}
?>
</table> 
Merci a toi, il servira très certainement, car en ce moment, j'ai remarquer qu'une entreprise créer plusieurs compte, sans la Même IP Avec des Pseudo du Genre << hfbfeikik >> Donc, il Pub ensuite. Merci a toi en résumé Smile
Merci pour le partage, des petites explications pour savoir ou mettre ça exactement ?
Pour l'installer, il suffit de créer une page .php avec tout le code dedans.
Cette page, vous la placez dans votre répertoire de base du forum.(Via le FTP)
puis pour l'ouvrir il suffit d'aller dessus:
http://monforumMybb.com/Mapage.php
Bonjour.

Merci pour le script, j'ai également remarqué bon nombre de bots s'inscrivant à mon forum ces derniers temps.
Par contre, ton script me retourne une erreur SQL :
"EMAIL INCORECTE:
Erreur SQL !
SELECT usergroup FROM mybb_users WHERE uid =''
Can't connect to local MySQL server through socket '/tmp/mysqld.sock' (2)"

Et mes connaissances en php sont trop basses pour que je retrouve exactement d'où vient le bug :/ j'ai vérifié dans la base de donnée que le champ usergroup existait bien, mais il semblerait que ce soit une erreur de connexion à la bdd plutot qu'un bete problème de champ :/

Une idée d'où ça peut venir ?
Pour ma part, je l'utilise mais il peut être contrer. Le seul moyen qui est vraiment efficace, c'est le plugin qui te rajoute une question personnalisé comme 2ième captcha.
En premier lieu il faut s'assurer que ce script soit installé dans le même répertoire que le fichier 'global.php'.

Ce type de problème est normalement relié à une mauvaise installation du serveur MySQL.
Merci pour la réponse si rapide Smile
Mais il se trouve que le fichier est placé dans le même répertoire que ce "global.php". Je ne sais pas trop pourquoi il n'arrive pas à faire le lien avec la base de donnée, mais maintenant que j'ai un nom de fichier, je vais peut-être pouvoir me plonger dans le code pour voir d'où vient le problème. Ca doit sûrement être une variable alakon qui n'est pas bien renseignée dans l'une ou l'autre des pages.
MAJ:

-Nouveau script disponible pour détecter les multi compte très rapidement.
-Maj du premier script avec un filtre qui détecte tous les email qui sortent de l'ordinaire

Comme d’habitude, vous êtes libre de les modifier...
Merci.
Salut , merci
Mais j'ai un souci sa m'affiche
EMAIL INCORECTE:
Erreur SQL !
SELECT usergroup FROM mybb_users WHERE uid =''
Access denied for user 'vi*****'@'localhost' (using password: NO) ( ce user est pas le même que j'ai mis pour la base de donné de mybb )

Comment résoudre ce problème Wink

Merci
Mise à jour du script de la détection des multi-comptes basé sur l'ip.

-Affichage des utilisateurs ban avec la mention "banni" écrit à coté du pseudo.

@thedark

EUh... je ne sais pas.
Nouveau script disponible !
Permet aux administrateurs de surveiller les MPs des membres...

Note:
-Comme d'hab, il fait le minimum à vous de l'améliorer si vous voulez...
J'ai fait les script et placé dans la base du forum ? Il me reste quoi à faire ? Rien tout est fait ?
URLs de référence