Introduction

Si vous maintenez un forum phpBB publique, vous avez certainement été confronté un jour ou l’autre à des utilisateurs peu scrupuleux qui peuplent votre forum de spams : messages inutiles (publicités pour médicaments, viagra, …), voir parfois avec du contenu pornographique !

Ayant été victime de ce type d’abus, il y a peu, ce post n’a pas pour but d’éradiquer tous les spamers de votre forum, mais vous permettra peut-être de vous fournir quelques pistes, ou quelques idées sur comment procéder…

Quelques conseils pour endiguer l’accroissement des spams sur votre forum

N’attendez pas d’avoir un million de spams (posts indésirables) pour réagir !

Plus vous attendez, plus le contenu utile et intéressant va être parsemé, plus la qualité de votre forum va baisser, et du même coup son attrait, et son référencement…

Les sauvegardes et manipulations nécessaires en base de données seront de plus en plus longues et difficile.

Sans parler des ressources consommées sur le serveur qui grandiront de manières exponentielles…

Faire régulièrement les mises à jour de votre logiciel de forum (phpBB ou autre)

C’est facile ! Il suffit de se rendre sur le site officiel du logiciel.

Si possible, empêchez l’inscription automatique

En général, il est nécessaire de se créer un compte utilisateur avant de pouvoir poster sur un forum.
La stratégie d’inscription devra empêcher les robots (bots spamers) de s’inscrire sur votre forum automatiquement.
Vous pouvez par exemple mettre en place un système de captcha ou poser une question simple auquel un humain sait répondre mais pas un ordinateur (test de turing).

Quelques pistes pour nettoyer votre forum

Attention ces pistes doivent être soumises à votre propre jugement, il va de soit qu’on ne maintient pas un forum utilisé par 30 personnes, comme un forum faisant 1000 posts par jours !…
Et donc que les solutions envisagées se verront plus ou moins efficaces, ou destructrices en fonction du type de fréquentation de votre forum….

  1. Supprimer les utilisateurs qui ont postés énormément de message.
  2. Supprimer les utilisateurs créés plusieurs fois avec la même adresse ip.
  3. Et enfin faites le ménage en nettoyant les tables de votre base de données (clé étrangères orphelines, optimisation des tables,…).

Conclusion

En suivant ces conseils, je suis passé de :

  • 60000 posts à un peu plus de 100 messages utiles.
  • Pratiquement autant pour les sujets (topics).
  • 1000 utilisateurs à environ 100
  • Les tables réservés à l’indexation de contenu ont été grandement nettoyées
  • 450Mo de base de données Mysql à 2Mo !


Quelques exemples pratiques sur le forum phpBB

N’oubliez pas de faire une sauvegarde de votre base de données avant d’intervenir dessus !!!!

J’ai repéré que ces derniers jours uniquement des topics indésirables sont tombés dans un forum…
Je commence par sélectionner tous les topics les plus récents du forum; et vérifie bien que uniquement les topics indésirables sont sélectionnés…


SELECT `topic_id`, `forum_id`, FROM_UNIXTIME(`topic_time`), `topic_time`, `topic_poster`, `topic_title`
FROM `pbb_topics`
WHERE `topic_time` >= 1337190526 AND `forum_id` = 5
ORDER BY `topic_time` DESC
LIMIT 0, 500

Puisque nous avons isolé les topics indésirables nous avons l’identifiant des utilisateurs indésirables `topic_poster`…

SELECT `topic_poster` FROM `pbb_topics` WHERE `topic_time` >= 1337190526 AND `forum_id` = 5

Nous pouvons donc en utilisant la requête du dessus construire la requête qui va supprimer les utilisateurs indésirables…

DELETE FROM `pbb_users` WHERE `user_id` IN (SELECT `topic_poster` FROM `pbb_topics` WHERE `topic_time` >= 1337190526 AND `forum_id` = 5)

Si on a supprimé des utilisateurs, les topics, posts, et d’autres objets du forum créés par ces utilisateurs vont se retrouver orphelins… Il est donc temps de faire le ménage…


-- Suppression des lignes n'ayant plus lieu d'être
DELETE FROM `pbb_user_group` WHERE `user_id` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_topics` WHERE `topic_poster` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_posts` WHERE `poster_id` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_posts` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_topics_posted` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_topics_posted` WHERE `user_id` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_topics_watch` WHERE `user_id` NOT IN (SELECT `user_id` FROM `pbb_users`);
DELETE FROM `pbb_topics_watch` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_topics_track` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_topics_watch` WHERE `topic_id` NOT IN (SELECT `topic_id` FROM `pbb_topics`);
DELETE FROM `pbb_search_wordmatch` WHERE `post_id` NOT IN (SELECT `post_id` FROM `pbb_posts`);
DELETE FROM `pbb_search_wordlist` WHERE `word_id` NOT IN (SELECT `word_id` FROM `pbb_search_wordmatch`);

Si vous visitez votre forum phpBB à cet instant, vous allez avoir peur… En effet, pour accélérer son fonctionnement le forum met en cache pas mal de données, il faut donc forcer le forum à rafraîchir ses données… Pour cela il y a pas mal de possibilité coté interface d’administration.
Enfin touche finale, pour forcer le rafraîchissement des statistiques d’un forum, il suffit de poster un nouveau sujet dans le forum souhaité, et de le supprimer juste après.