Anti-spam: Script de suppression en bloc des utilisateurs fluxBB
Dans la première partie, nous avons vu comment supprimer massivement les spammers qui s'inscrivent sur les forums fluxBB (version 1.4).
Cette seconde partie introduit un script PHP à placer sur le site et qui réalise l'opération automatiquement.
On définit un spammeur comme utilisateur s'inscrivant pour ajouter son profil, avec un lien sur un site éventuellement douteux, et qui n'a pas jamais ajouté de billet ou dont les billets sont des spams et ont été supprimés.
Le script est plus élaboré que la commande SQL simple, car il va tester la table des messages pour vérifier que l'utilisateur n'en a posté aucun et ne se contente pas de consulter le nombre de messages dans la table utilisateur.
Ce dernier en effet n'est pas mis à jour par fluxBB après suppression d'un billet. C'est un compteur à sens unique!
Tables fluxBB
Outre les tables décrites dans la première partie, nous utiliserons cette fois la table posts.
Table posts:
| poster | poster_id | ||||
| pseudo de l'utilisateur | son numéro d'identification |
On veut seulement de vérifier qu'un utilisateur n'a aucun billet.
Table topics:
| poster | ||||
| pseudo de l'utilisateur |
Normalement le topic est supprimé quand le premier billet est supprimé aussi on n'utilisera pas cette table.
Requête
On reprend les requêtes données dans la première partie et on ajoute un traitement pour la table des messages.
Vérifier le nombre de messages pour un utilisateur (on fera le test pour tous les utilisateurs en fait):
$user = "xxxx";
$query = SELECT * WHERE poster='$user'
$hnd = mysql_query($query, $db_handler);
if(mysql_num_rows($hnd) == 0)
{
echo "$user n'a aucun message.<br>";
}
Si le nombre de message est null, on peut mettre à jour le nombre de billets dans la table users:
UPDATE users SET num_posts='0' WHERE poster='$user'
Puis on ajoute au script les requêtes de suppression vues en première partie qui se basent sur la table users et les tables associées:
DELETE FROM bans WHERE username IN (SELECT username FROM users WHERE num_posts='0') DELETE FROM reports WHERE reported_by IN (SELECT id FROM users WHERE num_posts='0') DELETE FROM subscriptions WHERE user_id IN (SELECT user_id FROM users WHERE num_posts='0') DELETE FROM users WHERE num_posts='0' AND id != '1'
On conserve l'entrée 1 qui est celle de l'invité, "Guest" en anglais, qui doit toujours rester présente.
Le script de suppression
include("config.php");
$hnd = mysql_query("SELECT username FROM users", $db_handler);
while($userlist = mysql_fetch_assoc($hnd))
{
$user = $userlist['username'];
$hndposts = mysql_query("SELECT * FROM $posts WHERE poster='$user'", $db_handler);
if(mysql_num_rows($hndposts) == 0)
{
mysql_query("UPDATE users SET num_posts='0' WHERE username='$user'", $db_handler);
}
}
mysql_query("DELETE FROM bans WHERE username IN (SELECT username FROM users WHERE num_posts='0')", $db_handler);
mysql_query("DELETE FROM reports WHERE reported_by IN (SELECT id FROM users WHERE num_posts='0')", $db_handler);
mysql_query("DELETE FROM subscriptions WHERE user_id IN (SELECT id FROM users WHERE num_posts='0')", $db_handler);
mysql_query("DELETE FROM users WHERE num_posts='0' AND id != '1'", $db_handler);
echo "Done!";
A cela on doit ajouter le code de connexion à la base de données, ce qui est inclut dans le script à télécharger...
Télécharger et utiliser
Pour utiliser le script, on le place dans le répertoire racine de fluxBB et on appelle directement le fichier à partir d'un navigateur.
Par exemple:
http://www.monsiteweb.com/forum/killbill.php
Vous pouvez voir ce que fera le script sans modifier quoi que ce soit en activant provisoirement le drapeau DEBUG dans le code source:
$DEBUG = true;
Script de suppression en masse d'utilisateurs sous fluxBB
Le fichier s'appelle killbill.php. Vous pouvez changer ce nom et lui donner un nom personnalisé.
Faites par précaution une sauvegarde de la base de données avec la commande export de PHPMyAdmin ou la fonction de votre panel d'administration, avant la première utilisation.
| Tweet |
|
|
