[Zend Framework] Generation de captcha avec ZF (anti bot)

Vous savez surement tous que le net fourmille de robots spammeur qui envahissent nos forums, nos boites mails, etc …
Pour luter contre ceux-ci on utilise des captcha, c’est le nom des petites images qu’on vous demande de recopier dans une textbox lors d’une inscription ou de ces questions qui vous demande la somme de deux et cinq. Bref c’est un mécanisme anti robot. Zend Framework, dans sa version 1.6 et supérieur, propose une manière d’en générer facilement et de les intégrer facilement avec Zend_Form.

Tout d’abord il faut créer un nouvel element captcha dans notre formulaire. Ceci ce fait facilement car ZF propose la classe Zend_Form_Element_Captcha.

$captcha = new Zend_Form_Element_Captcha(nom, param);

nom représente biensure le nom de votre élément et param un tableau avec les paramètres (en soit comme un élément normal!). Dans le tableau on peut rajouter l’option captcha qui va configurer notre captcha. Celle ci se décline aussi sous la forme d’un tableau qui se construit comme ceci :

‘captcha’ => array(
‘captcha’ => ‘Type du captcha’,
‘wordLen’ => Nombre de caractère à afficher,
‘timeout’ => Temps avant fin du captcha,
// Seulement dans le cas d’une image
‘font’ => ‘Chemin vers la police de caractère’,
‘imgurl’ => ‘Ou seront stocker les images’,
)

Le type du captcha peux être le suivant :

  • Image : Image comme on les connait
  • Dumb : directement le texte (Non sécurisé !)
  • Figlet : Lettre sous forme de dessin textuel. (Utile si vous n’avez pas accès à la librairie GD).

Enfin voila à quoi ceci peut ressembler :

$captcha = new Zend_Form_Element_Captcha(‘captcha’, array(
‘label’ => « Copiez le code suivant : »,
‘captcha’ => array(
‘captcha’ => ‘Image’,
‘wordLen’ => 6,
‘timeout’ => 300,
‘font’ => ‘../application/fonts/Candara.ttf’,
‘imgurl’ => ‘/images/captcha’,
),
));

Si vous avez apprécié cet article, pensé à laissé un commentaire ou vous abonner au flux RSS feed.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *