Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Webyboom
23 octobre 2007

Accessibilité: le Captcha, est-ce accessible ?

Pour rappel ce terme bizzaroïde, « Captcha », qui paraît tout droit provenir du fin fond du Caucase, n'est en fait qu'un acronyme anglais « Completely Automated Public Turing test to Tell Computers and Humans Apart », soit en français, « test public de Turing complètement automatique ayant pour but de différencier les humains des ordinateurs (serait-ce une première forme de racisme entre humain et machine... ;-). Ce terme a été inventé en 2000 par Luis von Ahn, Manuel Blum et Nicholas J. Hopper de l'université Carnégie Mellon, et par John Langford d'IBM.

Ce test est utilisé sur internet dans les formulaires pour se prémunir :
- Contre les soumissions automatisées et intensives réalisées par des robots malveillants,
- Contre le spam lors de l'inscription à des webmails gratuits ou lors de la soumission de messages dans des blogs ou des forums de discussion,
- Contre l'extraction automatisée de bases de données,
- Contre la falsification des résultats de sondages

La vérification utilise la capacité d'analyse d'image ou de son de l'être humain. Un captcha usuel requiert que l'utilisateur tape les lettres et les chiffres visibles sur une image distordue qui apparaît à l'écran. Certains sites Web préfèrent afficher une image qui contient une question simple (2+2=?). Et oui apparement un ordinateur a du mal à comprendre pourquoi on lui demande une opération aussi simple..;-)

Cependant, les captchas visuels ne sont pas accessibles aux personnes malvoyantes, de même que les captchas auditifs ne le sont pas aux personnes malentendantes. La seule façon de construire un captcha accessible à tous demeure la question simple à laquelle il faut répondre.

Xavier Borderie de JDN Développeurs présente un système permettant de générer de manière aléatoire l'ensemble du contenu de l'image, afin de s'assurer d'une certaine sécurité : texte, image de fond, caractéristique de la police (taille, graisse, positionnement, angle, fonte utilisée, couleur), taille de l'image elle-même, ou des traits aléatoires qui viennent troubler encore le visiteur non humain.

Voici les fonctions impliquées :

L'image de fond est importée grâce à une première image, qui charge un fichier déterminé (choisi parmi une série d'image nommée "picX.jpg", par exemple.

  1. $rnd = rand(1, 26);
  2. $fond = imagecreatefromjpeg("img/pic".$rnd.".jpg");

Ce fond est ensuite collé sur l'image définitive, dont la taille peut également être aléatoire :

  1. $largeur = 120;
  2. $hauteur = 120;
  3. $image = ImageCreate($largeur, $hauteur);
  4. ImageCopy($image, $fond, 0, 0, 0, 0, $largeur, $hauteur);
  5. ImageDestroy($fond);

Nous n'utilisons ici que la fonte comme élément aléatoire du texte :

  1. $fontes = array("tahoma.ttf", "BSSYM7.TTF", "GARAIT.TTF", "georgia.ttf");
  2. $rnd = rand(0, count($fontes)-1);
  3. $police = $fontes[$rnd];
  4. $couleurTexte = imagecolorallocate($image, 255,255,255); // blanc
  5. ImageTTFText($image, 12, 12, 40, $hauteur/2, $couleurTexte, $police, $texte);

ImageTTFText() présente également l'intérêt, avec son 3e argument, de pouvoir donner un angle à la police, possiblement aléatoire. On pourrait même réaliser une boucle au travers de la chaîne, qui afficherait chaque caractère avec une police, une couleur, un angle différents... dans les limites de la lisibilité, bien sûr.

Tout ceci fait, il ne reste plus qu'à l'envoyer au navigateur :

  1. header("Content-type: image/jpg");
  2. imagejpeg($image);
  3. imagedestroy($image);

Lire l'article complet de Xavier Borderie

Publicité
Commentaires
Publicité
Derniers commentaires
Publicité