Selon moi, il existe deux grands choix de détection anti-spam sur la toile : vérifier que le posteur est un humain (vous par exemple) ou vérifier/déduire qu’il n’en est pas un (le robot spammeur).

Beaucoup ferrons le choix de détecter votre bonne foi d’être humain en vous soumettant au test du captcha. Combien font 2+2, recopiez la combinaison suivante, etc …. Cette méthode à, dans le fond, un certain potentiel répulsif contre le spam c’est vrai. Mais elle l’est aussi probablement pour vos visiteurs ! Pensez-y. C’est pour cette simple raison que ce n’est pas une bonne solution.

Il existe pourtant bien des moyens d’éviter le captcha de la mort. Le plus astucieux, trouvé il y a quelques temps chez julien, et revu depuis sur quelques très bon blogs, est le champ caché en CSS.

L’idée est de proposer un champ masqué pour l’utilisateur, et donc qu’il ne pourra par remplir, sauf s’il n’est pas vraiment humain, et qu’il n’interprète pas le CSS. Auquel cas ce champ sera rempli. Vous me suivez ?

Il est aussi possible de proposer une valeur par défaut, du style « ne modifiez pas ce champ ». Moins sexy, mais définitivement accessible.

La mise en place se fait assez simplement.

Tout d’abord, ajoutez les lignes suivantes juste avant la balise </form> placée tout en bas du fichier form.php contenu dans le dossier de votre thème dotclear :

Le piège est en place. Maintenant il suffit de détecter avant l’insertion du commentaire, si quelqu’un s’est fait prendre. Cela se passe dans le fichier layout/prepend.php aux alentours de la ligne 230. Placez juste sous …

… la condition suivante :

Et voilà, tout est en place.

Pour plus de sécurité, vous pouvez encore vérifier un autre point. Votre visiteur est-il bien un lecteur de votre blog ? Est-il bien passé par votre formulaire de commentaire ?

Testez-le en transférant une variable, en session (stockée en partie par votre serveur, et non dans la page html seule).

Ajoutez au même niveau que la première manipulation, le code suivant :

Et vérifier, de la même manière dans le fichier layout.php, en modifiant la précédente condition par celle-ci :

N'omettez pas de démarrer la session en placant un @session_start(); en haut de votre fonction, ou fichier.

Cette méthode est jusqu’à présent fonctionnelle. Vous devriez maintenant être relativement tranquille. Elle n’est cependant pas infaillible, car n’oublions pas que tous les spammeurs ne sont pas des robots. Cela devient alors difficile de les repérer avant la publication du message. Essayez tout de même d’installer dans vos plugins dotclear des outils comme spamplemousse qui bloqueront, par prévention, des commentaires incluant certains termes hors de propos. Voilà, en espérant vous éviter quelques heures de modération ;)