Depuis quelques temps, plusieurs commentaires spamment mon blogue. J'utilise la version 1.2 beta de Dotclear. En attendant de trouver une meilleure solution, voici celle qui, je l'espère, fera l'affaire.
Ouvrez le fichier inc/classes/class.blog.php.
Autour de la ligne 1417, on trouve la fonction addComment. C'est cette dernière qu'il faut modifier. Mes changements sont en rouge.
L'idée est de comparer le commentaire à une liste de mots. S'il en trouve un, on s'arrange pour ne pas le publier. Par défaut, j'ai posé la variable $apublier à 1. Si elle vaut 0, le commentaire est conservé dans la base de données, mais n'est pas en ligne. C'est à l'administrateur de le supprimer de son interface d'administration. Vous pourriez cependant vous éviter cette étape, et j'indique comment le faire dans le code.
Évidemment, le problème de cette solution réside dans l'obligation de modifier le fichier à chaque fois qu'un nouveau spam contenant d'autres mots que ceux de la variable en tableau $MOT fait son apparition. Il faut alors ajouter une entrée au tableau et télécharger à nouveau le fichier sur votre serveur.
function addComment($post_id,$auteur,$email,$site,$content,$trackback=false)
{
$post_id = (integer) $post_id;
$auteur = $this->secureString($auteur);
$email = $this->secureString($email);
$site = $this->secureString($site);
$content = $content;


//Si on désire garder le commentaire, on associera zéro à cette variable.
$apublier = 1; 
// jobin : pour supprimer les spams. Je mets les mots en array
//insérez les mots que vous jugez caractéristiques du spam
$MOT = array("online discount","viagra","buy","cheap","cool site"); 
$CMOT = count ($MOT);
for ($CX=0;$CX<$CMOT;$CX++)
{
 //on garde le commentaire au cas où.
 //si vous voulez le supprimer à la place, remplacez $apublier = 0; 
 //par return false;
 if (strpos($content,$MOT[$CX])) {$apublier = 0;} 
}
    
# Vérifications
	if (!trim($post_id)) {
		$this->setError(__('No entry ID'),1000);
	}
		
	if (!trim($auteur)) {
		$this->setError(__('Empty comment author'),1000);
	}
		
	if (!trim($content)) {
		$this->setError(__('Empty comment content'),1000);
	}
		
	if ($email != '' && !$this->isEmail($email)) {
		$this->setError(__('Invalid email address'),1000);
	}
		
	if ($this->error() !== false) {
		return false;
	}
		
	$site = preg_replace('|^http://|','',$site);
		
# Insertion
	$insReq = 'INSERT INTO '.$this->t_comment.' '.
	'(post_id,comment_dt,comment_upddt,comment_auteur,comment_email,'.
	'comment_site,comment_content,comment_ip,comment_pub,'.
	'comment_trackback) VALUES '.
	'(\''.$this->con->escapeStr($post_id).'\', '.
	'SYSDATE(),SYSDATE(), '.
	'\''.$this->con->escapeStr($auteur).'\', '.
	'\''.$this->con->escapeStr($email).'\', '.
	'\''.$this->con->escapeStr($site).'\', '.
	'\''.$this->con->escapeStr($content).'\', '.
	'\''.$this->con->escapeStr(@$_SERVER['REMOTE_ADDR']).'\', '.
        $apublier.
        ','.
        (integer) $trackback.') ';