Vous êtes ici: Support du web > Scripts et tutoriaux > PHP / MYSQL > [GD]Captcha protection anti-spam en php - captcha php gd sessions spam image

[GD]Captcha protection anti-spam en php - captcha php gd sessions spam image

[GD]Captcha protection anti-spam en php - captcha php gd sessions spam image [GD]Captcha protection anti-spam en php - captcha php gd sessions spam image
Note : 3.7/5 (2 votes)
Derniéres modifications : 12/07/2010 à 00:17:27
Mots-Clés : captcha php image gd anti-spam protection detection humain captcha texte image robots image gd script captcha tutoriel formulaire sessions captcha Completely Automated Public Turing test to Tell Computers and Humans Apart

Bonjour,
dans ce tutoriel, je vais vous montrer comment faire un système de captcha pour protéger contre le spam.
Les captcha sont des images contenant une chaine de caractère que l'utilisateur doit recopier de façon à prouver qu'il est un humain et non un système automatisé. Pour qu'un captcha soit bon, l'image doit être difficilement déchiffrable par un ordinateur utilisant des techniques qui détectent les caractères sur l'image, mais l'image doit aussi être facilement déchiffrable par les humains.

Le fonctionnement d'un système de captcha est simple. Sur le formulaire, nous allons mettre l'image captcha, cette image contiendra les caractères aléatoires que l'utilisateur devra recopier. Lorsque l'utilisateur validera le formulaire, les caractères qu'il a copié seront comparés à ceux qui étaient sur l'image(ils auront étés stockés dans les sessions).

L'image que nous allons générer doit être aléatoire. Les lettres, leur couleurs et leur angle seront déterminés aléatoirement à l'aide de la fonction php: rand
Nous allons utiliser la police de caractère Liberation Sans:

Police de caractère Chopin Script

Pour rendre l'image plus complexe, nous allons aussi mettre des lignes de position, de taille et de couleurs différentes.

Voici le code pour faire l'image du système de captcha:
captcha.php
Code: PHP
<?php
//Le nombre de caracteres
$ncarac = 5;
//Le nombre de lignes
$nlignes = 7;
//Les caractres qui seront utilises
$carac = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
$nca = count($carac);//On determine le nombre de lettres possible: 26
//Police de caractere a utiliser
$font = 'liberation_sans.ttf';
//On determine les tailles de limage
$x = $ncarac*30+10;
$y = 40;
//On cree limage
$img = imagecreatetruecolor($x,$y);
//On remplit limage avec du blanc
imagefill($img,0,0,imagecolorallocate($img, 255,255,255));
//On ajoute les caracteres
$chaine = "";
for($i=1;$i<=$ncarac;$i++)//On ajoute $ncarac caracteres
{
        $c = $carac[rand(0,($nca-1))];//Le nouveau caractere sera choisi aleatoirement
        imagettftext($img, 25, rand(-10,10), (($i-1)*30)+5, 30, imagecolorallocate($img, rand(0,100), rand(0,100), rand(0,100)),$font, $c);//On ajoute le caractere sur limage
        $chaine .= $c;//On ajoute le nouveau caractere a la chaine
}
//On ajoute les lignes
for($i=1;$i<=$nlignes;$i++)//On ajoute "$nlignes" lignes
{
        imagesetthickness($img,rand(1,2));//On specifie lepaisseur de la ligne
        imageline($img,rand(0,$x),rand(0,$y),rand(0,$x),rand(0,$y), imagecolorallocate($img, rand(0,100), rand(0,100), rand(0,100)));//On ajoute la ligne
}
//On stoque la chaine de caractere dans les sessions
session_start();
$_SESSION['captcha'] = $chaine;
//On affiche l'image finale
header('Content-type: image/png');
imagepng($img);
?>

Et le code pour le formulaire:
formulaire.php
Code: PHP
<?php
session_start();
//On verifie si le formulaire a ete valide
if(isset($_POST['nom'], $_POST['captcha'], $_SESSION['captcha']))
{
        //On compare le code entre par lutilisateur avec celui de limage(qui avait ete stoque dans les sessions)
        if(strtolower($_POST['captcha'])==strtolower($_SESSION['captcha']))
        {
                unset($_SESSION['captcha']);
                echo '<strong style="color:#00bb00;">Le code que vous avez entr&eacute; est le bon.</strong>';
                $form = false;
                //Ici, vous pouvez envoyer les donnes du formulaire
        }
        else
        {
                echo '<strong style="color:#bb0000;">Le code que vous avez entr&eacute; est mauvais, veuillez r&eacute;essayer.</strong>';
                $form = true;
        }
}
else
{
        $form = true;
}
//Si $form vaut true, le formulaire sera affiche
if($form)
{
?>
<form action="formulaire.php" method="post">
Votre nom:<input type="text" name="nom" value="<?php if(isset($_POST['nom'])){echo htmlentities($_POST['nom']);} ?>" /><br />
Veuillez recopier le code cidessous:<input type="text" name="captcha" /><br />
<img src="captcha.php" alt="CAPTCHA" /><br />
<input type="submit" value="Envoyer" />
</form>
<?php
}
?>
Merci et j'espère que ce tutoriel vous sera utile.

Scripts et tutoriaux similaires à celui ci:

Commentaires

Ajouter un commentaire





Vous n'êtes actuellement pas connecté, certaines de vos informations(tel que votre Adresse IP) seront enregistrées pour éviter du spam.
Votre message ne doit pas contenir certains mots ou une adresse internet, sinon, il ne sera pas envoyé.

Les commentaires

Envoyé par aglzime le 13/07/2010 à 00:38:50
Cool =)
Envoyé par ldid le 15/07/2010 à 18:40:07
super je ne comprends pourquoi chez ça ne marche pas cordialement
Envoyé par ybouane le 16/07/2010 à 06:44:43
Bonjour,
@ldid: Assure toi que tu a la librairie GD activée.

Cordialement :)
Envoyé par samwebo le 02/08/2010 à 12:41:05
sa marche pas chez moi le capache ne s'affiche pas
Envoyé par Mhaf le 15/08/2010 à 15:13:09
ç bon ça marcha juste il manque le non du formulaire ,il faut l'ecrire ex : "form1 " dans la page formulaire. php
vraiment merci pour ce joli script ... !
Envoyé par piratequenti le 27/08/2010 à 08:18:46
ou faut-il ecrire par exemple form1. Car chez moi cela ne fonctionne pas.
Envoyé par Steph13 le 12/11/2010 à 09:59:00
Bonjour,
comment faire pour mettre le captcha avec le formulaire de contact qui se trouve sur votre site :
h t t p : / / w w w .supportduweb.com/scripts_tutoriaux-code-source-68-formulaire-de-contact-en-php-script . h t m l

car je ne trouve pas de tuto sur votre site ou sa explique comment faire merci

Cordialement Stéphane
Envoyé par cypeGeanymn le 11/01/2011 à 16:40:07
I find myself coming to your blog more and more often to the point where my visits are almost daily now!
Envoyé par ulcetsIntuict le 22/01/2011 à 05:57:48
I find myself coming to your blog more and more often to the point where my visits are almost daily now!
Envoyé par NoireeWeila le 23/01/2011 à 23:07:37
Very Interesting Information! Thank You For Thi Information!
Envoyé par Elibleextef le 25/01/2011 à 01:12:47
I just book marked your blog on Digg and StumbleUpon.I enjoy reading your commentaries.
Envoyé par Elibleextef le 26/01/2011 à 05:18:49
Very Interesting Blog! Thank You For Thi Post!
Envoyé par offensure le 27/01/2011 à 23:36:14
Thank You For This Post, was added to my bookmarks.
Envoyé par drinking alcohol with tramadol le 03/02/2011 à 04:33:03
Thank You For This Post, was added to my bookmarks.
Envoyé par is tramadol illegal le 04/02/2011 à 06:15:49
Thank You For This Blog, was added to my bookmarks.
Envoyé par best registry cleaner 2007 le 05/02/2011 à 21:36:11
I just book marked your blog on Digg and StumbleUpon.I enjoy reading your commentaries.
Envoyé par tramadol drug study le 05/02/2011 à 23:39:18
Great Blog. I add this Blog to my bookmarks.
Envoyé par tramadol urinary clearance le 08/02/2011 à 02:46:26
Very informative post. Thanks for taking the time to share your view with us.
Envoyé par autos auctions West Valley City le 09/02/2011 à 09:20:28
I just book marked your blog on Digg and StumbleUpon.I enjoy reading your commentaries.
Envoyé par lund fishing boats le 11/02/2011 à 20:19:08
Very informative post. Thanks for taking the time to share your view with us.
Envoyé par sdf le 15/02/2011 à 09:58:39
sdf
Envoyé par petit_lapin le 15/02/2011 à 10:00:51
Bonjour, comment on met ensemble les deux php pour que ca marche?
Envoyé par petit_lapin le 15/02/2011 à 10:09:01
bjs , je pense que vous êtes très radin sur les expliquations car ça marche pas votre formulaire !
Envoyé par such a thing as free antivirus protection le 18/02/2011 à 02:57:03
Very Interesting Post! Thank You For Thi Blog!
Envoyé par where can i buy malt extract le 20/02/2011 à 00:23:50
You certainly deserve a round of applause for your post and more specifically, your blog in general. Very high quality material
Envoyé par used cars newton le willows le 21/02/2011 à 06:58:36
I find myself coming to your blog more and more often to the point where my visits are almost daily now!
Envoyé par wertoiffBaire le 23/02/2011 à 21:42:32
I?ve been visiting your blog for a while now and I always find a gem in your new posts. Thanks for sharing.
Envoyé par buy shineray motorcycle le 23/02/2011 à 22:40:40
You certainly have some agreeable opinions and views. Your blog provides a fresh look at the subject.
Envoyé par ford brush guard used le 25/02/2011 à 09:16:32
I just sent this post to a bunch of my friends as I agree with most of what you?re saying here and the way you?ve presented it is awesome.
Envoyé par nourponrerb le 27/02/2011 à 00:22:18
You certainly deserve a round of applause for your post and more specifically, your blog in general. Very high quality material
Envoyé par t and a auto auction nampa le 01/03/2011 à 19:43:16
Very Interesting Information! Thank You For Thi Information!
Envoyé par RemyTheatty le 02/03/2011 à 21:59:46
You certainly have some agreeable opinions and views. Your blog provides a fresh look at the subject.
Envoyé par salut le 06/03/2011 à 13:24:47
koi
Envoyé par BRAXPROGGRONA le 25/03/2011 à 23:43:34
Very Interesting Post! Thank You For Thi Post!
Envoyé par gaumpspah le 04/04/2011 à 02:17:09
You certainly have some agreeable opinions and views. Your blog provides a fresh look at the subject.
Envoyé par gaumpspah le 06/04/2011 à 03:45:04
I?ve been visiting your blog for a while now and I always find a gem in your new posts. Thanks for sharing.
Envoyé par VogsHeepe le 19/04/2011 à 00:37:26
I just book marked your blog on Digg and StumbleUpon.I enjoy reading your commentaries.
Envoyé par pavelvolinkiinss le 26/04/2011 à 03:09:53
Admin, hello! here are having problems with your site. malware warning Write me. icq 989567856647
Envoyé par NAXkIqzeU le 04/06/2011 à 08:52:58
Thats not just logic. Thats rlealy sensible.
Envoyé par Matano,Masao le 08/07/2011 à 08:25:13
Are you foolish?? Ha Ha Ha ?(??´)?
Come at any time if there is a complaint.

090-8475-6493
Envoyé par SuperPatrick le 11/07/2011 à 02:11:19
If you have no image with this code, it might be because of the missing font ( $font = 'liberation_sans.ttf';) just put the .ttf file you want in the same folder and change the variable
Envoyé par bruno le 31/07/2011 à 22:58:17
C'est supper bon pou nous amateurs du developpement web
Envoyé par hakaornaisa le 02/08/2011 à 12:45:23
-lisinopril-no-prescription-required-overnight]buy lisinopril online
Envoyé par Usennypes le 12/08/2011 à 04:21:20
-lisinopril-no-prescription-required-overnight]buy lisinopril online[/url]
Envoyé par Milfsoup le 23/09/2011 à 11:42:00
Thanks For This Blog, was added to my bookmarks.
Envoyé par How To Keep a Man Interested le 29/09/2011 à 00:54:06
Great Blog. I add this Blog to my bookmarks.
Envoyé par rinionsulse le 05/10/2011 à 15:09:19
TEst progon bbbb 344 bab
Envoyé par How To Keep A Man Interested le 15/10/2011 à 02:01:40
Very Interesting Information! Thank You For Thi Information!
Envoyé par Femyrarmemism le 19/10/2011 à 13:06:18
?????? ?????? ??-115, ?????, ? ????.
Envoyé par unsaksrooff le 23/10/2011 à 16:38:19
?????? ? ?????????? ???? ?????? ? ?????????
Envoyé par Police Badges For Sale le 25/10/2011 à 07:10:25
Thank You For This Blog, was added to my bookmarks.
Envoyé par How To Improve Credit Score le 29/10/2011 à 16:20:12
I just book marked your blog on Digg and StumbleUpon.I enjoy reading your commentaries.
Envoyé par Toronto Police Auction le 02/11/2011 à 03:23:53
You certainly have some agreeable opinions and views. Your blog provides a fresh look at the subject.
Envoyé par truite le 06/12/2011 à 14:59:46
Bonjour et merci pour votre code!!
Il marche, cela dit il n'affiche pas les caractères de la police.
Alors est-ce parce que je travaille sous mac?
Quoi qu'il en soit je n'arrive pas à afficher les lettres.

Merci d'avance pour votre réponse
Envoyé par CNA Training le 13/12/2011 à 12:30:10
Je suis vraiment aimer le thème / la conception de votre site. Avez-vous déjà rencontré des problèmes de compatibilité du navigateur? Un petit nombre de lecteurs de mon blog se sont plaints de mon blog ne fonctionne pas correctement dans l'Explorateur , mais ressemble beaucoup dans Chrome. Avez-vous des conseils pour aider à résoudre ce problème?
Envoyé par Pozycjonowanie Stron le 15/12/2011 à 07:17:13
Hi there would you mind stating which blog platform you're working with? I'm planning to start my own blog soon but I'm having a tough time choosing between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design and style seems different then most blogs and I'm looking for something unique. P.S Apologies for being off-topic but I had to ask!
Envoyé par MaryTenderLOS le 17/12/2011 à 12:53:17
The great thing about them is they could be taken anywhere you want as they are light and are attractive. These little friends have their own personalities and recognize 30 words and phrases. Barbie will love going to visit another top pick, the Disney Princess Castle that comes complete with furniture and an elevator.
Envoyé par VadoLoomera le 04/01/2012 à 16:15:52
курю
абсент
кукла
маша
Envoyé par lol le 08/01/2012 à 11:32:03
lol
Envoyé par yooofxip le 24/01/2012 à 12:28:30
20
Envoyé par nobduck le 26/01/2012 à 12:48:34
Bonjour.

Un grand merci pour ce tuto que j'ai pu adapter sans problème à mon formulaire.
Je souhaiterais cependant ajouter un petit lien (ou image) permettant de recharger le captcha lorsque le visiteur ne parvient pas à le lire.
De même, j'utilise un système de validation du formulaire en jQuery et je souhaiterais que le captcha change lorsque le visiteur n'a pas correctement rempli les différents champs du formulaire.

Avec vous une petite suggestion pour ces deux cas de figure à me proposer ?

Encore merci.


Il y a actuellent 33 personne(s) connecté(es)
Page générée en 0.006303 secondes
Retour en haut
Règlements - Nous contacter - Aider le site - RSS News
Copyright © Support du web - Toute copie partielle ou complète de nos créations est interdite sans l'accord de ses auteurs.
Toutes les marques citées appartiennent à leurs compagnies respectives.