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); ?>