8771 sujets

Développement web côté serveur, CMS

Pages :
Bonjour

On trouve un peu partout un certain nombre de solutions de captcha dont aucune ne semble pleinement satisfaisante, soit en terme d'accessibilité soit en terme de fiabilité. Il y a apparemment plusieurs types de bots (certains même assistés d'un humain) et les différentes solutions proposées ne paraissent efficaces qu'au prix d'une inaccessibilité parfois quasi-complète.

Je n'ai pas de solution à proposer mais je me demande si on ne pourrait pas essayer d'engager une sorte de réflexion sur la question (ça a sûrement déjà été fait ailleurs...) pour essayer de parvenir à une solution acceptable.

Le problème c'est qu'un champ à remplir peut être rempli par n'importe qui, n'importe quand et en n'importe quelle langue. A ma connaissance les solutions actuelles sont soit de conditionner l'envoi à une intervention quelconque (lire un mot-image déformé, répondre à une question plus ou moins tarabiscotée, etc) soit de passer par une astuce technique (champ caché par CSS où l'imbécile de bot modifie la valeur, changement aléatoire de nom de champs, etc).

Alors je me demande si la solution par exemple d'afficher une page intermédiaire reprenant les valeurs envoyées par POST écrite en dur (genre : vous avez posté ceci et cela, veuillez confirmer > bouton OK) associé à la présence d'un champ non-visible reprenant le contenu du POST et vérifiant la stricte équivalence des deux au moment du submit pourrait ne pas faire l'affaire ? En terme de sens et d'accessibilité, le réaffichage des données postées serait cohérent et pertinent.

Pour le bot :
- si il a entre temps modifié le champ invisible, le message ne sort pas.
- Si il est programmé pour envoyer le form et le quitter aussitôt dès la première page sans attendre le résultat, le cycle est arrêté.
- s'il arrive directement sur cette seconde page, les valeurs sont vides.

Inconvénient : si l'humain qui accompagne le bot attend la seconde page et valide manuellement, il peut automatiser le protocole.

Pour empêcher ça on aurait la possibilité d'afficher aléatoirement le bouton submit de la seconde page de façon à ce que seul un humain puisse détecter où cliquer (les autres cachés par CSS par exemple ?). Ou alors est-il possible d'intégrer plusieurs submit avec des destinations différentes et qu'un seul puisse être valable ? L'idée c'est que le bot en choisisse un au hasard (ou le premier ?) et - en imaginant qu'il y en ait 10 - réduire de 90% le form-spam automatisé par un humain, ce qui est assez rare sur nos "petits" sites.

L'inconvénient c'est qu'un utilisateur non-CSS soit confronté à tous ces boutons submit... Comment solutionner ça ? Est-ce qu'on ne peut pas conditionner l'apparition de ces boutons à quelque chose de solide ?

Est-ce que pour commencer cette solution de page intermédiaire est intéressante ou pas ? C'est complètement à côté de la plaque ?

Comme dit c'est pas une solution qui est proposée mais une esquisse de possibilité de tentative de début d'essai de solution Smiley cligne .

a+
Il y a eu un une MOD proposée sur PunBB pour enrayer les robots spammers.
Et ça marche.
Le principe est simple: on pose en toutes lettres une question mathématique.
Mais: il n'y en a pas qu'une. Et celui qui implémente le Captcha sur son forum peut modifier et ajouter autant de questions arithmétiques qu'il l'entend.
Le titre du topic est "un captca accessible".
Je post, je cherche le topic et dès que je l'ai retrouvé, j'édites et je te file le lien.
Modifié par Captain Ishido (23 Jul 2007 - 16:04)
L'idée est d'essayer d'éviter ce genre de chose... une question mathématique ou quoi que ce soit d'autre. L'utilisateur envoie ce qu'il a à envoyer et on ne lui demande rien de plus.
Arsene a écrit :
une question mathématique ou quoi que ce soit d'autre.

Tu fais comme je-sais-plus-qui, une limite ou une intégrale à calculer. Comme ça en même temps, tu filtres tes utilisateurs pour n'avoir que des cultivés Smiley lol
On s'est pas compris ou quoi ? je ne cherche pas à attirer des remarques acides mais à mettre à profit ce réservoir de talents qu'est la communauté Alsa pour essayer d'avancer sur cette question.

L'idée est justement d'éviter ce genre de problèmes, et donc d'éviter d'avoir à obliger l'utilisateur à faire quelque chose qu'il ne devrait pas avoir à faire. Donc pas de questions à résoudre (mathématiques ou autres), pas d'images à décoder en jouant à l'OCR, etc.
C'était pour de rire...


Nan sérieusement, y'a pas mal de sites aussi qui passent par une prévisualisation. Style tu clique sur poster, mais en fait ça passe par une page intermédiaire récapitulative. Tu peux en même temps te relire et corriger, puis tu valides pour de vrai. Le mec de 456 Berea Street a fait ça, et ça piège tous les bots (sauf bien-sûr en cas d'attaque ciblée). Et y'a plus de gens qui se relisent et corrigent leurs fautes, ça fait d'une pierre deux coups.

Faudrait voir aussi ce que font les bots des input de type hidden, en utilisant un token unique lors de l'envoi pourrait en contrer certains (et éviter les CSRF). A voir...
FlorentG a écrit :
ça piège tous les bots

Ça piège les bots parce qu'ils ne dépassent pas la première page (un seul submit et ils dégagent) ou parce qu'il a mis en place une protection plus loin ?

<edit> Tiens c'est marrant la liste Accessiweb parle justement de captcha aujourd'hui...</edit>
Modifié par Arsene (23 Jul 2007 - 18:17)
Ca les piège parce qu'il ne passe pas la première page, effectivement. Ils se contentent d'envoyer le formulaire comme ça, sans regarder la réponse.
Arsene a écrit :
Bonjour

On trouve un peu partout un certain nombre de solutions de captcha dont aucune ne semble pleinement satisfaisante, soit en terme d'accessibilité soit en terme de fiabilité.


Juste pour info sur ce point : un captcha en gif animé est une solution relativement fiable (mais pas plus accessible bien sûr)
L'interêt est que le texte de l'image n'est jamais completement affiché dans chacune des frames du gif et c'est donc plus dur pour le bot.
http://www.phpclasses.org/browse/view/image/file/16277/name/captcha.gif

http://phpclasses.100pour100net.com/browse/package/3423.html
@FlorentG : si c'était aussi simple (le bot envoie le form et dégage) pourquoi toutes ces solutions compliquées ? Il aurait suffi d'installer systématiquement une page-relais nécessitant une action quelconque pour en finir définitivement avec le form-spam....

@hitzerod : la question ne peut être résolue sans que fiabilité et accessibilité soient assurées.
Ben justement non..

a écrit :
Les sites offrant des ressources attractives et servant des millions d'utilisateurs auront toujours besoin de systèmes de contrôle d'accès pour limiter les d'abus. À un tel niveau, il semble raisonnable de recourir à plusieurs approches concurrentes, y compris aux CAPTCHA sonores et visuels, pour ce contrôle. Toutefois, ces sites doivent s'assurer que les utilisateurs handicapés disposent de moyens activables par un humain pour interagir avec une ressource donnée et dans une quantité de temps raisonnable.
Au contraire, l'utilisation répandue des CAPTCHA dans les sites à faible trafic et peu de ressources constitue une pratique inutilement préjudiciable pour les utilisateurs handicapés. On ne devrait pas faire l'apologie d'un mécanisme de contrôle d'accès inacessible comme solution, en particulier lorsqu'il existe d'autres mécanismes, non seulement plus accessibles mais aussi plus efficaces.


Partant de l'idée qu'un CAPTCHA est fondamentalement inaccessible (il existe toujours un cas de figure où ça empêche l'accès aux ressources placées derrière) je reviens à cette idée de double formulaire.

Si un utilisateur a la capacité technologique, cognitive et motrice pour remplir un formulaire il n'a pas nécessairement celle(s) requise(s) pour décrypter une image (non-voyant, daltonien, etc), répondre à une question complexe (langue mal maîtrisée, incompréhension du propos et du rôle de cette question, etc.) ou tout autre système basé sur des prérequis équivalents.

Un double formulaire nous garantit que si l'utilisateur a passé le premier il passera aussi le second. Apparemment les bots ne franchissent pas seuls le cap du second formulaire, mais rien n'empêche un humain de scripter le protocole. Une solution serait donc d'empêcher cette automatisation, par exemple en affichant 3 boutons submit (1 "cliquez ici" et 2 "ne pas cliquer") de façon aléatoire ????
C'est effectivement une idée intéressante à condition évidemment de déployer un dispositif de repli non-JS... Je vais faire quelques essais.
Arsene a écrit :
C'est effectivement une idée intéressante à condition évidemment de déployer un dispositif de repli non-JS...

Je vois ça plutôt dans l'autre sens : un dispositif de base anti-spam le plus accessible possible, avec par exemple plusieurs catchpas au choix, ou la solution que tu proposes, et une surcouche JavaScript qui permet de bypasser tout ça pour ceux chez qui c'est disponible.
On peut aussi inverser la proposition : générer des boutons submit aléatoires via JS dont un seul est valide et qui soit placé devant les autres (peut-être même le seul visible ?) alors qu'il n'est pas devant dans l'ordre du flux : résultat le bot clique sur le premier qu'il trouve dans le code et ça ne mène nulle part. Pour un bot assisté d'un être humain pareil : impossible de scripter le protocole puisque c'est aléatoire.
L'inconvénient pour les UA non-js est d'afficher tous les boutons (genre à l'audio : ...ne pas cliquer...ne pas cliquer...cliquer ici...ne pas cliquer...)

En tout cas c'est peut-être moins pénalisant les Captchas habituels ????
Très intéressante cette discussion. Smiley smile

Quoi que l'on fasse un bot suffisamment évolué pourra toujours surpasser les captchas donc vous avez raison autant qu'ils soient accessibles. Cependant la multiplication des protections permet de rendre la chose plus complexe pour un bot.

Les boutons multiples me semblent être une bonne idée et la prévisualisation aussi donc ça fait déjà deux. Je pense que c'est suffisant si le désir de sécurité n'est pas plus fort que celui de rapidité.

Ensuite si on veut plus alors on peut analyser :
- l'encombrement du serveur
- le comportement de l'utilisateur ( rapidité de réponse, évènements déclenchés, ... )
puis en fonction de cela voir si on cherche des mots clés dans ce qui est envoyé.
Il y a aussi l'option de ne pas mettre de captcha du tout en de filtrer ensuite ce qui reçu côté serveur, par exemple avec un filtre Bayésien {fr}.

À mon avis la solution d'avenir car les contres côté serveur peuvent évoluer en même temps que les bots.
Hello CNeo

a écrit :
Quoi que l'on fasse un bot suffisamment évolué pourra toujours surpasser les captchas


Dans l'absolu oui, puisque la théorie veut que le gendarme ait toujours un coup de retard sur le voleur... mais le processus de scripting et d'automatisation des bots est suffisamment complexe à réaliser pour que ce ne soit plus jouable sur des sites tels que les nôtres -- à moins qu'il y ait un google-boy ou une yahoo-girl dans la communauté Alsa ?

a écrit :
les captchas donc (...) autant qu'ils soient accessibles.


Si on arrive à se protéger par une technique 100% standard des bots automatiques + des bots "accompagnés" sans avoir recours à ces captchas plus ou moins anti-accessibles, c'est déjà pas si mal...
Il existe des programmes qui essayent de comprendre les langues humaines ou du moins certaines phrases qui touchent à leur fonction donc si tu en fais un assez évolué pour comprendre les CAPTCHAs tu peux passer toutes les sécurités. Ça touche un peu à la robotique de science fiction mais c'est tout à fait faisable. Smiley ravi
Pages :