Mise à jour: La version 1.1 est sortie pour supporter MySQL. Voir plus bas !

Ça fait quelques semaines que je travaille sur un plug-in captcha accessible pour Dotclear 2. Ce plugin existait pour Dotclear 1 et je l'utilisais, et donc il m'a manqué lorsque je suis passé sous Dotclear 2[1].

C'est quoi, un captcha ?

Un captcha, c'est un mécanisme qui permet de s'assurer que ce qui interagit avec le programme est bien un être humain. Pour cela, plusieurs techniques sont utilisables. Vous avez sans doute déjà rencontré ces images avec du texte tordu à l'intérieur, qu'il faut recopier dans une case, pour prouver qu'on n'est pas une machine.

Pourquoi un captcha accessible ?

Je ne sais pas pour vous, mais moi, les images avec du texte tordu, ça me saoule : non seulement ce n'est pas complètement efficace, mais en plus je n'y arrive pas toujours du premier coup ! À force de vouloir les faire inviolables, ils en deviennent inviolables même pour des vrais humains !

Et ne parlons même pas des personnes qui ont vraiment des problèmes handicapants.

Un captcha accessible devra montrer que l'être qui commente sur un billet est bien un être humain, et ce de manière moins agressive que les captchas graphiques.

C'est quoi le principe ?

Le principe est simple : lorsque quelqu'un veut poser un commentaire, il doit aussi répondre à une question simple, du genre "combien font deux et deux ?". Si il n'y répond pas ou s'il répond à côté, le message est marqué comme "indésirable". Dans le cas idéal, il faudrait que, lorsqu'on répond mal, le plug-in propose de répondre à nouveau, jusqu'à un certain nombre d'échecs (2 ou 3 ?), mais ce n'est pas fait pour le moment.

De fait, lorsque j'utilisais ce plug-in dans le passé, je n'ai jamais eu de problème de spam, alors que j'en ai aujourd'hui avec Dotclear 2 et ses plugins de spam par défaut.

Comment ça marche ? Un peu de technique

On stocke la liste des questions en base de données. J'en suis à construire la gui pour cela en m'inspirant du filtre des bad words. Dans la base, on a aussi une table de correspondance entre un hash, créé lorsque le formulaire de commentaires est affiché, et la question posée. Cela évite le rejeu (genre si on fait qu'un hash de la question, il suffit de donner le hash avec la réponse qui va bien, et voilà, l'antispam est contourné), et permet de vérifier néanmoins que la réponse est correcte.

Une version 1.0

Je me dis qu'il y a encore beaucoup de choses à faire, mais voici néanmoins une version 1.0 (voir les fichiers attachés).

Voici les fonctionnalités implementées :

  • Gestion des questions/réponses depuis l'interface d'admin
  • Installation automatique de la base de données et d'une question par défaut
  • Purge des sessions stockées en base
  • Traduction française et anglaise

Ce qu'il me reste à faire avant d'être pleinement satisfait :

  • faire une passe sur l'architecture, peut-être repenser les objets existants
  • renommer certaines classes pour coller aux conventions Dotclear
  • implémenter la possibilité de se tromper une ou deux fois
  • peut-être implémenter l'install dans mon objet AccessibleCaptcha, qui serait juste appelé dans _install.php.

Version 1.1

La version 1.1 est sortie le 9 mai 2011. Son seul changement est que le calcul des dates est maintenant fait en PHP, et pas en SQL, ce qui permet d'être compatible à la fois avec MySQL et PostgreSQL. La version 1.0 n'était pas compatible MySQL.

Gestionnaire de versions

J'en ai profité pour essayer mercurial, donc j'ai créé un repo sur bitbucket :

Page sur DotAddict

Pages sur le wiki de Dotclear Lab (obsolète)

Mes références

Notes

[1] Et en plus le site du plugin pour Dotclear 1 n'existe plus. Si besoin, je dois en avoir une copie dans un coin !