Filtrer les spams sur fluxBB

Les spams ont pour but d'afficher des mots-clés et c'est là leur point faible: en interdisant l'affichage de ces mots sans rapport avec le sujet du forum (le spam par définition), on met fin facilement à leur nuisance.

Les spammeurs profitent du libre accès aux forums pour mettre des liens sur des sites vendant ou prétendant vendre des produits, généralement pour adultes.

Même si l'on prohibe les liens, tout au moins pour les nouveaux inscrits, on s'aperçoit qu'ils continuent à ajouter des spams sans doute dans l'espoir de voir Google indexer leur profil et ainsi l'URL de leur site.

FluxBB qui est un sytème très minimal et léger (cela peut être la raison pour laquelle on l'utilise) et n'offre aucune protection contre le spam. Sauf le blocage d'une IP qui ne bloque pas les proxys. Aussi doit on prendre ses propres mesures.

Modifier le fichier robots.txt

Interdire aux robots de parser les profils pour éviter qu'il ne lie des sites indésirables au forum:

User-agent: *
Disallow:/forum/profile.php

On suppose que fluxBB est installé dans le répertoire forum, sinon on met le nom de répertoire approprié.
On peut aussi interdire à l'occasion différents fichiers qu'il n'est pas besoin d'indexer.

Ajouter un filtre sur le contenu soumis

Pour cela on va créer un fichier "filter.php" contenant différents filtres et qui sera inclus dans le fichier post.php.

Ce filtre est inséré avant l'envoi du message par l'utilisateur, donc avant la ligne:

$now = time();

Et cela donne:

include("filter.php");
$now = time();  

Sélectionner les utilisateurs

Le filtre doit s'appliquer aux utilisateurs nouveaux, donc n'ayant eu aucune réponse par un membre autorisé à un message précédent.

On utilise dans la table users les colonnes username et num_posts et last_post puis dans la table posts les colonnes id, edited_by qui renvoit sur la table users.

Accès total autorisé à l'administrateur

L'administrateur doit pouvoir tout faire sur le site aussi le filtre ne s'applique pas à lui:

if(! is_admmod)
{
  include("filter.php");
} 

Interdire l'affichage d'images

Elle peuvent être fortement indésirable.

if(stristr($message, "<img") !== false)
{
die('Images forbidden');
}

Interdire les liens

if(stristr($message, "http://") !== false)
{
die('Links forbidden to new users');
}

Interdire les caractères russes

Sauf si bien sûr les messages en russes sont autorisés sur le forum.

if(stristr($message, "ð") || 
stristr($message, "ä") ||
stristr($message, "ë") ||
stristr($message, "ã") ||
stristr($message, "Ñ") ||
stristr($message, "ñ"))
{
die('English only forum');
}

Interdire certains mots-clés

if(stristr($message, "mot-clé-interdit") !== false)
{
die('Spam detected');
}