Anti-spam: Suppression en bloc des utilisateurs
Comment supprimer massivement les spammers qui s'inscrivent sur les forums pour faire indexer des liens sur leur site par les moteurs de recherche?
Il est dommage que fluxBB ne permette pas de moduler l'accès aux renseignements sur les utilisateurs selon leur anciènneté.
Une première riposte au spam est très simple: Le spam devient déjà inutile si le fichier robots.txt interdit aux moteurs de recherche l'accès aux profils:
disallow:/forum/profile.php disallow:/forum/userlist.php
Ensuite il faudrait de temps en temps nettoyer la base de donnée des inscriptions inutiles, tous les spammeurs dont les messages ont été effacés ou qui n'ont pas posté de message..
Mais ce n'est pas si simple: il y a des relations multiples entre les tables de la base et si l'on supprime une entrée dans l'une d'elles, il faut aussi supprimer toutes les références à cette entrée.
Suppression en bloc des utilisateurs sur phpBB
L'autre forum permet de supprimer les utilisateurs en deux temps. A partir du panel de gestion, on choisit le panneau de désactivation ou "prune" en anglais. On donne la valeur 0 pour le nombre de posts et on sélectionne tout.
Puis dans la liste des utilisateurs désactivé, on choisit d'afficher le nombre maximal d'utilisateur par page. On peut ainsi les cocher tous avec l'option en bas de page.
On choisit alors l'option d'effacement ou "Delete" et on envoie la commande.
Sur fluxBB, sur la version actuelle tout au moins, il faut créer soi-même sa requête SQL et connaître les tables concernées.
Tables fluxBB et membres inscrits
Nous allons donc voir toutes les tables et colonnes qui se rapportent aux utilisateurs.
users
id: identificateur repris dans d'autres tables.
username: nom repris dans d'autres tables.
num_posts: nombre de messages.
bans
username: l'utilisateur peut être banni, il faut supprimer l'entrée dans bans aussi.
reports
reported_by: (id) pour le cas peu probable ou un spammer aurait fait un rapport.
subscriptions
user_id: (id) pour le cas ou le spammer aurait souscrit à ce fil de discussion.
La requête d'interrogation
A partir de l'interface de PHPMyAdmin ou toute autre interface à SQL, on peut déjà voir combien il y a d'utilisateurs inactifs:
SELECT username FROM users WHERE num_posts='0' AND username != 'Guest'
Remplacer users par xxxxusers si le préfix déclaré dans config.php est xxxx.
On exclut Guest qui est un le nom générique des invités dans la version anglaise. Ce peut être un autre nom dans votre version, vérifier dans la liste des utilisateurs pour l'id 1.
En fait il est indispensable de conserver un utilisateur dont l'id est 1.
Voir les utilisateurs bannis sans messages:
SELECT * FROM bans, users WHERE bans.username=users.username AND users.num_posts='0'
Autre formulation utilisable pour la suppression:
SELECT * FROM bans WHERE username IN (SELECT username FROM users WHERE num_posts='0')
On remplacera SELECT * par DELETE pour la suppression.
La requête de suppression
On supprime les utilisateurs n'ayant aucun message avec cette commande SQL:
DELETE FROM $usertable WHERE num_posts='0' AND username != 'Guest'
Important: Dans la version francisée, remplacer Guest par Invité. Il a l'id 1.
Mais on doit d'abord éliminer les références:
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 id FROM users WHERE num_posts='0')
On peut se contenter de vérifier d'abord les références, et faire une simple suppresssion s'il n'y en a pas.
Deuxième partie
| Tweet |
|
|
