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 !
35 réactions
1 De julos - 18/01/2010, 14:22
Cool, merci ! comment on l'installe ? ;)
2 De JulienW - 18/01/2010, 15:23
comme n'importe quel plug-in DotClear :-)
3 De zampai - 13/01/2011, 16:05
Ne fonctionne pas sous dotclear 2.1.5 :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 (1064)
4 De JulienW - 13/01/2011, 18:40
Moi je suis en Dotclear 2.2 mais j'étais auparavant en 2.1 et ça fonctionnait.
En revanche, j'utilise PostgreSQL et il est vrai que je n'ai pas testé avec MySQL. J'utilise cependant les fonctions de base de Dotclear, je ne fais pas de SQL "à la main" (enfin, je crois, je vais vérifier).
5 De gregoire - 13/03/2011, 00:06
Merci bien.
Très content de voir que la fonction captcha refait surface en DC2 (je suis en 2.2.2 désormais). Installation My SQL sans difficulté. Ne reste plus qu'à créer les questions/réponses.
Au plaisir de voir un jour une v2 qui implémente les améliorations que tu évoques.
6 De Yannick - 16/04/2011, 14:57
Salut, même problème que dans un commentaire précédent...
Au moment du post d'un commentaire:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 (1064)
MySql 5.1
Dotclear 2.2.2
7 De Julien Wajsberg - 16/04/2011, 22:59
Et quelle version de PHP ? (moi je suis en 5.1 ...)
8 De Yannick - 17/04/2011, 14:51
Salut, php 5.3.2
9 De Yannick - 27/04/2011, 17:19
Salut Julien,
Une piste a suivre pour le problème d'erreur "syntaxe SQL" qui remonte ? J'ai essayé de comprendre un peu le code moi même..mais j'ai un peu de mal malgré les commentaires ;)
Une idée de truc a tester ? de code a regarder ? de version ? etc.. ?
Merci d'avance
10 De JulienW - 27/04/2011, 17:44
J'avoue, pas encore eu le temps de regarder :/
Ça vaut le coup de descendre la version de PHP en 5.2 pour tester déjà ça.
Autrement peut-être une différence dans la version de MySQL. Sur mon serveur mutualisé c'est une version 4, donc très très ancienne.
Allez, promis, j'essaie au moins de reproduire avant dimanche ;-)
11 De JulienW - 27/04/2011, 23:29
Pardon, c'est PostgreSQL chez moi.
Je suis en train de faire une install locale de DC sur un MySQL 5.
12 De JulienW - 27/04/2011, 23:54
J'ai trouvé l'incompatibilité avec MySQL.
Dans l'attente d'un correctif directement dans l'extension, vous pouvez faire la modif suivante.
Dans class.accessible.captcha.php, ligne 144 :
remplacer :
par
(enlever les guillemets simples autour de la valeur de l'intervalle, et mettre "minute" au lieu de "min")
13 De Yannick - 28/04/2011, 00:11
Yesss !!
Merci Julien... ca m'a l'air tout bon maintenant :)
A priori tout passe bien maintenant.. Merci d'avoir pris la peine de tester avec mySql
Ce petit plugin va me sauver la vie :)
Merci pour ton aide.. et bravo pour ce plugin !!
14 De JulieNW - 28/04/2011, 00:17
Tant mieux !
En passant, l'ajout de commentaires m'a l'air affreusement lent avec MySQL, avec ou sans le plugin captcha.
J'ai fait une install toute propre... il manque peut-être des indexes.
15 De Yannick - 28/04/2011, 00:23
Ahh ?
Perso ca met environ 1 seconde entre le click d'envoi et le moment ou le commentaire apparait..
Je ne sais pas si c'est "affreusement" lent.. mais ca ne me derange pas + que ca ;)
Encore merci.. :)
16 De JulienW - 09/05/2011, 08:59
Je viens d'uploader la version 1.1 sur ce billet. Elle devrait fonctionner à la fois sur PostgreSQL et MySQL.
Je vais aussi l'uploader sur dotaddict dès que mon compte est activé ce qui permettra ensuite les mises à jour automatiques (non qu'il y en aura beaucoup ;-) ).
17 De honnyvore - 16/11/2011, 09:57
Bonjour,
Je viens de passer DC à la version 2.4 et j'ai par la suite installé votre plugin, mais voilà, je ne trouve pas l'interface d'administration pour ce plugin !
La faute sans doute à la nouvelle structure de DC ...
18 De JulienW - 16/11/2011, 10:19
Je n'ai pas encore installé la 2.4, mais dans la 2.3, l'interface se trouve dans la configuration des antispam.
Je pense que ça doit être similaire en 2.4, mais je ne pourrai pas tester avant ce week-end.
19 De honnyvore - 16/11/2011, 10:31
En effet !
Merci pour la réponse rapide !!!
Et merci pour ce plugin qui va m'éviter plein de pub d'un site allemand :(
20 De Wakoun - 20/11/2011, 03:41
Merci pour ce plug-in, c'est parfait !
21 De Jen - 13/06/2012, 12:30
Bonjour :)
J'arrive un peu après la bataille mais les commentaires de bots m'exaspèrent en ce moment, donc je me décide à mettre un captcha!
J'ai donc installé AccessibleCaptcha, sauf que je ne trouve pas où le paramétrer dans l'interface admin... Dans la capture sur http://plugins.dotaddict.org/dc2/de... il semble que c'est dans le menu Antispam, sauf que moi dans Antispam j'ai justement le plugin Antispam !
Alors c'est où ? (pas dmc svp merci :))
Merci pour le coup de main !
22 De Julien W - 13/06/2012, 14:38
Dans la partie "Extensions > Antispam", tu as normalement une liste de filtres. Dans cette liste, tu as une ligne "Accessible Captcha", et là tu peux cliquer sur la ptite icône à droite de cette ligne.
Et voilà tu devrais réussir à accéder à la config du plugin :-)
Pour y accéder directement, c'est à l'adresse http://chemin.du.blog/admin/plugin.... (remplace évidemment "chemin.du.blog")
23 De Jen - 13/06/2012, 15:36
Ah ouiiiiii !
Super, merci !
24 De Onphalos - 20/09/2012, 17:05
Bonjour,
J'ai installé le plugin, qui me semble fort intéressant. J'ai un seul problème, je n'arrive pas à le trouver dans l'interface d'administration. Je voudrais ajouter des questions pour éviter que deux plus deux soit partout.
Merci par avance de votre aide.
O.
25 De Julien Wajsberg - 08/10/2012, 12:14
C'est marqué juste au-dessus ;)
26 De Guillaume - 10/01/2013, 12:12
Merci pour ce plugin. Il faudrait effectivement qu'il bloque tout simplement la publication d'un commentaire en affichant un message d'erreur plutôt que de le marquer comme indésirable, ce que fait déjà très bien Akismet.
Ce serait alors le couple idéal en matière de lutte contre le spam dans les commentaires qui inondent mon blog depuis quelques semaines...
27 De Julien Wajsberg - 10/01/2013, 12:58
Moi Je le préfère comme ça: les spammeurs ne voient pas que quelque chose s'est mal passé, et c'est facile de les enlever à la main (on affiche 500 messages dans une page pour les supprimer d'un coup).
Mais je suppose que ça pourrait être une option.
28 De Guillaume - 10/01/2013, 13:09
@Julien Wajsberg : justement c'est ce que fait déjà très bien Akismet et les autres filtres. Je voudrais cependant éviter d'avoir à regarder dans ces listes de commentaires bloqués les faux positifs.
Étant donné que les bots ne vont pas forcément analyser le message d'erreur (en français qui plus est), le filtrage captcha + message d'erreur éviterait bon nombre de vrais positifs sans être bloquant pour autant pour les internautes.
Les plus intelligents des bots se feront ensuite prendre par les autres filtres de Dotclear, tout en ne posant pas de problème aux vrais commentaires (pas de mise en quarantaine suite à un échec silencieux du captcha, comme c'est malheureusement le cas actuellement).
29 De Julien - 10/01/2013, 13:20
Ok, je comprends l'idée. Je me demande si ça aurait pas plutôt sa place dans Dotclear, un truc qui serait global à tous les filtres plutôt que chacun fasse sa sauce...
30 De Serveur - 16/02/2013, 19:22
A la vue des premiers essais, fonctionne très bien sous DC 2.1.6.
Je continue le test ...
31 De Jeremy - 12/05/2013, 15:57
Salut on dirait que je suis tout seul mais j'ai bien trouvé comment parametrer le plugin mais le problème c'est qu'il ne s'affiche pas sur la partie publique du blog!
Du coup tous mes commentaires se retrouvent bloqués!
J'ai raté un truc?
sql php5 Dotclear 2.5
Merci
32 De Julien - 13/05/2013, 19:19
Bonjour Jérémy,
utilises-tu un thème particulier ?
33 De Jeremy - 15/05/2013, 08:42
Bonjour,
Oui j'utilise le thème freshy Il y a peut être quelque lignes que je devrais rajouter?
34 De Jeremy - 16/05/2013, 23:42
Ok j'ai fait ma petite enquête! Ce que je retrouve sur le thème ductile (ici utilisé) c'est cette partie de code :
<!
#BEHAVIORpublicCommentFormAfterContent>Que je n'avait pas dans mon fichier post.html (car c'est dans ce fichier l'appel des commentaires)
Désolé ça va prendre de la place mais voici le bout de code que j'ai :
code<h3> </h3>
<label for="c_name">
</label></p><label for="c_mail">
</label></p><label for="c_site">
( )</label>J'ai rajouté le code manquant. Penses tu que je puisse faire mieux? ou améliorer l'affichage? le résultat http://www.ma-boulangerie-maison.co...
Merci
35 De JulienW - 17/05/2013, 11:23
Ton code s'affiche pas très bien dans le commentaire ici, mais sur ton site ça m'a l'air bien :)