DevKB
Web Development Knowledge Base
HOME | TOP 20 | WRITE AN ARTICLE |
Sections :


RSS RSS Feed

Vous aussi, aidez les autres développeurs, publiez vos bouts de codes utiles et vos liens préférés ...
Publiez un article !


Valid HTML 4.0 Transitional

Plateforme d'envoi de gros fichiers en ligne
Script PHP de boutique en ligne
Mondes virtuels gratuits en 3D

Aurélie Dufour - - 21/03/2008 - vue 161 fois

Script PHP anti-robot facile à utiliser (captcha)

Cette fonction php génère une image PNG, qui contient 5 caractères que l'internaute doit recopier avant de valider un formulaire par exemple (captcha) :

<?

session_start();

//la fonction ci-dessous prend en paramètres le nombre de caractères à générer
function chaineAleatoire($nombre = 5)
{
        $chaine = '';
        for($i = 0; $i < $nombre; $i++)
        {
                $chaine .= mt_rand(0,9);
        }
        return $chaine;
}
function image($chaine)
{
        $largeur = (strlen($chaine) * 10); // Environ la largeur d'un caractere
        $hauteur = 20; // La bonne hauteur
        $image = imagecreate($largeur,$hauteur);

        $blanc = imagecolorallocate($image, 255, 255, 255); // On colore tout en blanc
        $noir = imagecolorallocate($image, 0, 0, 0);

        $milieuHauteur = ($hauteur / 2) - 8; // Pour centrer le texte en hauteur
        imagestring($image, 6, (strlen($chaine) / 2 ), $milieuHauteur, $chaine, $noir); // On ecrit au milieu 
        ImageRectangle ($image, 1, 1, $largeur - 1, $hauteur - 1, $noir); // Le rectangle autour pour l'esthétique
                $hauteur1 = mt_rand(2,$hauteur); // Barre aléatoire
                $hauteur2 = mt_rand(2,$hauteur); // Fin de la barre aléatoire

        ImageLine ($image, 2,$hauteur1, $largeur - 2, $hauteur2, $noir); // Barre aléatoire
        ImageLine ($image, 2, $milieuHauteur + 8, $largeur - 2, $milieuHauteur + 8, $noir); // Barre standard
        imagepng($image); // On dessine
        imagedestroy($image);
        return $chaine;
}

$nbr = 5; // on veut 5 chiffres aléatoires
$chaine = chaineAleatoire($nbr); // génération de la chaine
$_SESSION['chaine'] = md5($chaine); // on crypte la bonne valeur et on la met dans la session
header("Content-type: image/png");
imagepng($chaine); // on affiche l'image avec la chaine obtenue.

?>

Pour faire appel à cette fonction, vous n'avez même pas besoin de faire un include : faites comme si vous insériez une image toute simple en HTML :

<img src="captcha.php" alt="code anti-bot">
<input name="code" type="text" value="">

Ce qui affiche dans votre page Web quelque chose du type :code_securite

 

Pour finir, au début du script PHP qui recoit les données du formulaire, vérifiez la validité du code recopié par l'utilisateur :

<?php
session_start();
$code = $_POST["code"];
if(md5($code) != $_SESSION['chaine']) die("Erreur: code incorrect !");
 
... suite de votre code ...

 
Pour plus d'infos sur l'histoire des CAPTCHA, lire : http://fr.wikipedia.org/wiki/Captcha
 




Write a comment :
Your name :     E-mail (optional) :

AntiSpam : please write the sum of 3 + 2 =