Lutter efficacement contre les spams sur WordPress

14 Septembre 2011

Dès que son blog commence à avoir un peu de succès et à apparaitre dans les résultats de Google, les spams débarquent en postant des dizaines de commentaires. C'est un véritable fléau qui peut avoir un impact relativement important à la fois sur le serveur et sur le temps nécessaire à la modération. Voici quelques conseils que j'appliqués cet été et qui m'ont permis de considérablement diminuer le nombre de spam publiés sur le blog…

La modération est vraiment quelque chose qu'il ne faut pas prendre à la légère, en appliquant ces 3 conseils j'ai drastiquement réduit le nombre de spams publiés sur le blog.

Utiliser le plugin Akismet

Akismet est une webapp qui est fait pour protéger un blog des commentaires de spams, il a bloqué plus de 32 milliards de spams depuis sa création. Il existe un plugin pour WordPress afin de facilement s'interfacer avec Akismet et ainsi protéger son blog.

Ne pas installer ce plugin sur son serveur est une mauvaise idée pour moi, car même si Akismet est parfois capricieux, il peut considérer des commentaires en spams alors qu'ils ne le sont pas, il gère une très grande majorité des spams.

Sur mon serveur, Akismet fait du très bon travail puisqu'environ 90% des commentaires publiés sur mon blog sont du spams et ils n'ont jamais été publiés.

Installer ce plugin est vraiment un gain de temps appréciable dans la gestion de son blog et l'installation est très rapide puisqu'il est directement installé avec WordPress !

Modifier son fichier .htaccess

La seconde technique consiste à mettre les mains dans le cambouis pour filtrer. Généralementles spammeurs utilisent des robots pour poster des milliers de commentaires sur des milliers de sites.
Mais les robots ne sont pas tous bien codés et c'est ainsi que l'on peut les détecter.

Voici une petite règle de réécriture pour Apache qui permet de se débarrasser de spams :

# protection contre le spam
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*johanbleuzen.fr* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

Concrètement cette règle de réécriture détecte les tentatives de commentaires qui correspondent aux requêtes POST sur le script PHP wp-comments-post.php et dont le referer n'est pas mon blog avec un User Agent vide. Dans le cas ou toutes les conditions sont réunies le spammeur est redirigé vers chez lui.

Cette technique permet de filtrer les spammeurs avant Akismet et ainsi d'alléger la charge de son serveur.

Désactiver les commentaires sur les anciens posts

Avoir les commentaires ouverts sur tous les posts de son blog c'est un peu comme tendre le baton pour se faire battre. Plus on ouvre la porte, plus les spammeurs essaieront de rentrer. C'est pourquoi il faut fermer la porte des vieux articles.

Pour appliquer cette astuce, il faut également mettre les mains dans le cambouis en modifiant son thème. Mais la modification est très simple, il suffit d'utiliser le snippet suivant :

  <?php if ( comments_open() ) : // Commentaires ouverts ?>
    // Afficher le formulaire de commentaire
  <?php else : // Commentaires fermés ?>
    // Afficher un message avec un lien vers un formulaire de contact
  <?php endif; ?>

Bien sur si des lecteurs veulent commenter, il ne peuvent plus. C'est donc une bonne pratique de mettre un lien vers un formulaire de contact lorsque les commentaires sont fermés.

Conclusion

Cet été je n'ai pas eu beaucoup de temps pour m'occuper du blog (et pour poster), en appliquant ces trois principes, je n'ai eu que 45 commentaires considérés en spams en 3 mois. Alors que j'avais eu environ 700 commentaires en spams entre janvier et juin.
Ces 3 conseils ne sont pas très couteux à mettre en place mais le retour sur investissement est très positif.

Charger les commentaires…