Visiteur  Droits sur la page Lecture seule  

 

Captcha en Php

Source : http://forums.ovh.com/showthread.php?t=12089

Nous allons voir comment mettre en place un système anti-spam en PHP pour vos formulaires...

L'objet de ce script est de protéger vos formulaires de contact par un code secret généré graphiquement à recopier dans un champ du formulaire afin d'éviter à des robots de vous bombarder de mails de spam.

Ce script utilise la librairie GD2

La code secret, pour rester secret , est passé par variable de session. Au début de votre page contenant le formulaire, insérez le code suivant:

<?php
     session_start();//ouverture d'une session
     $secret=""; //initialisation du code secret
     for($i=0;$i<5;$i++) { //génération du code secret à 5 caractères
          $secret.=chr(mt_rand(65, 90));
     }
     $_SESSION['secret'] = $secret;//stockage du code dans une variable de session
?>

Votre script de traitement de formulaire doit resembler à ceci :

<?php
     session_start();
     if ($_POST['Secret']==$_SESSION['secret']) { // code secret valide
 
          votre code de traitement du formulaire
 
     } else { // code scret invalide
 
          votre code de traitement de code secret invalide
 
     }
     unset($_SESSION['secret']); // on detruit le code secret
 
     votre code de traitement de retour
?>

Enfin, le script de génération de code secret :

<?php
   session_start();   //demarrage de la session
   $text=$_SESSION['secret']; //on récupére le code à générer
   header("Content-type: image/png"); //définition du type d'image générée (png)
   $im = imagecreatefromjpeg("secret.jpg");// Création de l'image à partir d'un fichier contenant le fond de l'image à générer
   $id = imagecreatefromjpeg("secret.jpg");// Création d'une deuxième image identique
   $grey = imagecolorallocate($im, 128, 128, 128); // définition de la couleur "gris"
   $black = imagecolorallocate($im, 0, 0, 0); // définition de la couleur "noir"
   $font = 'COURBD.TTF';// à remplacez le chemin par votre propre chemin de police TTF
   for($i=0;$i<5;$i++) {   //boucle de génération des 5 caractères du code secret
      $angle=mt_rand(10,30);   //définition d'un angle aléatoire entre 10 et 30 degrés
      if(mt_rand(0,1)==1) $angle=-$angle; //définition aléatoire du signe à appliquer à l'angle
      imagettftext($im, 14, $angle, 11+(20*$i), 21, $grey, $font, substr($text,$i,1));// génération de l'ombre d'un caractère du code secret en gris
      imagettftext($im, 14, $angle, 10+(20*$i), 20, $black, $font, substr($text,$i,1));// génération du caractère du code secret en noir
   }
   $id=imagerotate ( $id, 180,0 ); // on applique une rotation de 180° à notre deuxième image créée à partier de l'image de fond
   imagecopymerge ( $im, $id, 0, 0, 0, 0, 120, 30, 50 ); //on fusione cette image à notre code secret avec un facteur de tranparence de 50%
   imagepng($im); //notre code secret est terminé
   imagedestroy($im); //on libére nos ressources images
   imagedestroy($id);
?>

Image utilisée pour tramer le code secret :

 
basetech/captcha.txt · Dernière modification: 12/12/2006 08:59 (édition externe)
 
Ajouter à Netvibes      

 
Derniers changements Hébergé par www.ebsoft.org Propulsé par DokuWiki