Dotclear 1, Free et SPAM - Dans le code

Je vous ai parlé de mon installation anti-spam chez Free qui me permet — en tout cas j'ose l'espérer — de passer à travers les mesures de rétorsions qu'ils appliquent dès qu'ils constatent la présence de spam dans la base de données. Je vais vous indiquer ici les modifications que j'ai apportées à deux plugins, Gallery et Spamplemousse, pour éviter le stockage des spams comme je l'expliquais dans ce billet.

Le plugin Gallery

Si vous n'utilisez pas ce plugin, vous pouvez sauter directement au chapitre suivant qui concerne le plugin Spamplemousse (voir ici).

Tout d'abord, commençons par le plugin Gallery pour lequel les modifications consistent à faire passer les commentaires déposés sur les images par le filtre des plugins anti-spam, Spamplemousse et SpamClear.

Dans le fichier class.gallery.php, au début, vous trouvez ceci :

…
require_once dirname(__FILE__).'/class.galleryimage.php';
require_once dirname(__FILE__).'/class.galleryexif.php';

Insérez juste après ceci :

/* Spamplemousse */
if (@file_exists(dirname(__FILE__).'/../spamplemousse/lib/class.moderation.php')) {
    $spamplemousse_ready=true;
    require_once dirname(__FILE__).'/../spamplemousse/lib/class.moderation.php';
    require_once dirname(__FILE__).'/../spamplemousse/lib/class.spamfilter.php';
} else {
    $spamplemousse_ready=false;
}

/* SpamClear */
if (@file_exists(dirname(__FILE__).'/../spamclear/functions.php')) {
    $spamclear_ready=true;
} else {
    $spamclear_ready=false;
}

Cela permet d'inclure le code des fonctions de filtrage nécessaires. Au passage on positionne des flags indiquant la présence ou l'absence des plugins en question.

Ensuite, toujours dans le même fichier, direction la fonction addComment() qui est utilisée pour enregistrer un commentaire déposé via le formulaire. Dans cette fonction, au tout début, j'ai rajouté cette ligne :

if (!dc_allow_comments) return false;

Ce qui permet d'ouvrir ou de fermer les commentaires des galeries en même temps que ceux des billets. Ce n'est pas indispensable mais très pratique lorsque vous vous éloignez pour un certain temps loin de votre blog. Dans ce cas je n'ai qu'à fermer les commentaires et les rétroliens via la configuration du blog pour être tranquille jusqu'à mon retour.

Ensuite, juste après cette ligne :

 $site = preg_replace('|^http://|','',$site);

Il faut rajouter ceci :

if ($this->__isSpam($auteur,$email,$site,$content)) return false;
global $spamclear_ready;
if ($spamclear_ready) {
    $filter = new SpamClear($this->con);
    if($filter->isSpam($content)) return false;
}

La première ligne utilise une fonction qui va filtrer via Spamplemousse. Les lignes suivantes permettent de passer par le filtrage de SpamClear.

Dernière modification, à la fin du fichier, juste avant le } ?> final, rajoutez ceci :

function __isSpam($nom,$mail,$site,$content) {
    global $spamplemousse_ready;
    if (!$spamplemousse_ready) {
        return false;
    } else {
        # adresse ip reelle (gestion du cas du reverse proxy)
        $ip = spamfilter::realip(@$_SERVER['REMOTE_ADDR'], @$_SERVER['HTTP_X_FORWARDED_FOR']);
        return spamfilter::is_spam($nom,$mail,$site, $ip, trim($content));
    }
}

Enregistrez le fichier. C'est terminé pour ce plugin. Il est maintenant pourvu d'un filtrage anti-spam identique aux commentaires et rétroliens des billets.

Le plugin Spamplemousse

Edit du 23 mai 2008 : Si vous utilisez la version 0.1.8 (sortie récemment) de ce plugin alors les modifications que je précise ensuite ne sont plus nécessaires. D'une part cette version n'enregistre plus son activité dans la table journal de Dotclear, et d'autre part, elle permet en modifiant deux valeurs du fichier config.php du plugin d'empêcher l'enregistrement en file d'attente :

# suppression automatique des commentaires
# sans passer par la file de modération
define('spam_comment_suppr', false);
# suppression automatique des trackbacks
# sans passer par la file de modération
define('spam_trackback_suppr', false);

Remplacez simplement la valeur false par true, enregistrez et c'est terminé.

Pour les versions antérieures (< 0.1.8), suivez les instructions suivantes :

Maintenant voyons les modifications apportées au plugin Spamplemousse pour éviter le stockage des commentaires et rétroliens considérés par lui comme du spam — j'en ai profité pour supprimer également l'enregistrement de ses actions dans la table journal de Dotclear, trouvant que ça surcharge inutilement la base de données.

Première modification, suppression de l'enregistrement des actions dans la table journal. Pour cela, ouvrez le fichier /lib/class.moderation.php. Allez jusqu'à la fonction addComment(). Et mettez en commentaire les lignes suivantes :

/* Pas d'enregistrement dans la table journal */
/*
if ( is_callable(array('blog','triggerLog')) ) {
    $this->triggerLog('spamplemousse',$id,'comment marked as spam');
} else {
    $this->tiggerLog('spamplemousse',$id,'comment marked as spam');
}
*/

C'est tout pour ce fichier. Ensuite, pour éviter l'enregistrement de rétroliens considérés comme spam par Spamplemousse, ouvrez le fichier /inc/tb.php. Mettez en commentaire ces deux lignes :

/* Pas d'enregistrement des retroliens consideres comme spam */
/*
$moderation = new moderation($blog);
$id = $moderation->addComment($id, $blog_name, '', $url, $comment, true, dc_time_delta, dc_comments_pub, $spam, $ip);
*/

Et rajoutez cette ligne juste après :

$id = true;

Cela permet de ne pas enregistrer mais de conserver les autres traitements comme la notification par mail.

Enfin, pour éviter l'enregistrement de commentaires considérés comme spam par Spamplemousse, ouvrez le fichier postcon.php. Mettez en commentaire ces lignes :

/* Pas d'enregistrement des commentaires consideres comme spam */
/*
$moderation = new moderation($blog);	

# ajout du commentaire dans  la file de modération
$id = $moderation->addComment($post_id, $nom, $mail, $site, $content, 0, dc_time_delta, dc_comments_pub, $spam, $ip);
*/

Et rajoutez cette ligne juste après :

$id = true;

Cela permet, comme pour les rétroliens, de ne pas enregistrer mais de conserver les autres traitements comme la notification par mail.

Conclusion

Ces modifications sont en œuvre sur mon blog depuis quelques mois et ne m'ont, pour l'instant, pas posé de problème particulier et me permettent d'avoir l'esprit à peu près tranquille, pour un temps — on n'est pas à l'abri d'un changement de politique de Free en ce qui concerne le traitement des spams.

Dernière recommendation avant de finir : prenez soin de faire une copie de sauvegarde des fichiers avant de les modifier, on n'est jamais trop prudent.

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/3154

Haut de page