Captcha évolué avec image généré en PHP

  Information

Il existe beaucoup de script de captcha sur le Net, des simples et des plus compliqués. Celle ci est simple à mettre en place et il fonctionne très bien sur tout les navigateurs (IE, FireFox, Chrome..)

  • La première partie doit être placé dans un fichier à part apelé securitecode.php
  • La seconde partie c'est votre formulaire de validation.
  code source classé dans  Formulaires

 
 01    
 02    
 03    
 04    
 05    
 06    
 07    
 08    
 09    
 10    
 11    
 12    
 13    
 14    
 15    
 16    
 17    
 18    
 19    
 20    
 21    
 22    
 23    
 24    
 25    
 26    
 27    
 28    
 29    
 30    
 31    
 32    
 33    
 34    
 35    
 36    
 37    
 38    
 39    
 40    
 41    
 42    
 43    
 44    
 45    
 46    
 47    
 48    
 49    
 50    
 51    
 52    
 53    
 54    
 55    
 56    
 57    
 58    
 59    
 60    
 61    
 62    
 63    
 64    
 65    
 66    
 67    
 68    
 69    
 70    
 71    
 72    
 73    
 74    
 75    
 76    
 77    
 78    
                               
<?php
/*---------------------------------------------------------------*/
/*
    Titre : Captcha Ã©volué avec image généré en PHP                                                        
                                                                                                                          
    URL   : https://phpsources.net/code_s.php?id=468
    Date Ã©dition     : 19 Nov 2008                                                                                        
    Date mise Ã  jour : 19 Sept 2019                                                                                      
    Rapport de la maj:                                                                                                    
    - fonctionnement du code vérifié                                                                                
*/
/*---------------------------------------------------------------*/?>
    // Créer un fichier securitecode.php dans lequel vous placer ce code :

<?php
    session_start();

    $largeur  120;
    $hauteur  40;
    $longueur 5;
    $liste '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $code    '';
    $counter 0;

$image imagecreate($largeur$hauteur) or die('Impossible d\'initializer GD');

for( $i=0$i<10$i++ ) {
   imageline($image,
   mt_rand(0,$largeur), mt_rand(0,$hauteur),
   mt_rand(0,$largeur), mt_rand(0,$hauteur),
   imagecolorallocate($imagemt_rand(200,255),mt_rand(200,255),mt_rand(200,255)
));
 }

for( $i=0$x=0$i<$longueur$i++ ) {
   $charactere substr($listerand(0strlen($liste)-1), 1);
   $x += 10 mt_rand(0,10);
   imagechar($imagemt_rand(3,5), $xmt_rand(5,20), $charactere,
   imagecolorallocate($imagemt_rand(0,155), mt_rand(0,155), mt_rand(0,155)));
   $code .= strtolower($charactere);
 }
   
  header('Content-Type: image/jpeg');
  imagejpeg($image);
  imagedestroy($image);

  $_SESSION['securecode'] = $code;
// fin du code
?>                               


Le formulaire :


<?php session_start(); ?>

    <body>

<?php
       if (isset($_POST['submitform'])){
       $secure isset($_POST['secure']) ? strtolower($_POST['secure']) : '';
          if ($secure == $_SESSION['securecode']) {
             echo 'Le code de sécurité est ok';
             unset($_SESSION['securecode']);
          }
          else {  echo 'Le code de sécurité est incorrecte!';
             }
        }
?>
          <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" >
             Code de sécurité:
                  <input name="secure" type="text" size="10" />
                  <img src="securitecode.php" alt="Code de sécurité" />
                  <input type="submit" name="submitform" value="Envoyer" />
          </form>

    </body>

          Fonctions du code - Doc officielle PHP

   php.net   Description Versions PHP OUTIL
   die Alias de la fonction exit() PHP 4, PHP 5, PHP 7, PHP 8
   echo Affiche une chaîne de caractères PHP 4, PHP 5, PHP 7, PHP 8
   header Envoie un en-tête HTTP PHP 4, PHP 5, PHP 7, PHP 8
   imagechar Dessine un caractère horizontalement PHP 4, PHP 5, PHP 7, PHP 8
   imagecolorallocate Alloue une couleur pour une image PHP 4, PHP 5, PHP 7, PHP 8
   imagecreate Crée une nouvelle image à palette PHP 4, PHP 5, PHP 7, PHP 8
   imagedestroy Détruit une image PHP 4, PHP 5, PHP 7, PHP 8
   imagejpeg Envoie une image JPEG vers un navigateur ou un fichier PHP 4, PHP 5, PHP 7, PHP 8
   imageline Dessine une ligne PHP 4, PHP 5, PHP 7, PHP 8
   isset Détermine si une variable est affectée PHP 4, PHP 5, PHP 7, PHP 8
   mt_rand Génère une meilleure valeur aléatoire PHP 4, PHP 5, PHP 7, PHP 8
   rand Génère une valeur aléatoire PHP 4, PHP 5, PHP 7, PHP 8
   session_start Initialise une session PHP 4, PHP 5, PHP 7, PHP 8
   strlen Calcule la taille d'une chaîne PHP 4, PHP 5, PHP 7, PHP 8
   strtolower Renvoie une chaîne en minuscules PHP 4, PHP 5, PHP 7, PHP 8
   substr Retourne un segment de chaîne PHP 4, PHP 5, PHP 7, PHP 8
   unset Détruit une variable PHP 4, PHP 5, PHP 7, PHP 8

   Dites merci aux auteurs pour leurs travail, ça ne coûte rien et ça fait toujours plaisir wink

[14]

  • avatar

    Invité

    16 Sept 2020 à 14:18

    bonjour,merci infiniment pour le script.

  • avatar

    Invité

    21 Sept 2019 à 20:25

    Ce code est impeccable et toujours dans le coup en PHP 7. Un grand merci à son auteur

  • avatar

    KOogar

    20 Déc 2010 à 23:21

    il n'y a rien a bidouiller, il faut correctement créer un fichier php, l'apelé securitecode.php, ensuite installer le formulaire sur la page que l'on souhaite protéger. Rien de plus simple. Maintenant si ton formulaire ne s'affiche pas, vu que c'est du pur html, c'est que tu as un problème autre part.

  • avatar

    Invité

    17 Déc 2010 à 10:22

    En l'état le code ne fonctionne pas. Seul le formulaire s'affiche sans l'image. En bidouillant le code l'image s'affiche mais plus le formulaire... Y'aurait-il une personne qui aurait de m'expliquer le pourquoi du comment ? Merci d'avance.

  • avatar

    Invité

    05 Aout 2009 à 14:59

    Cela aurait été vraiment sympa de faire partager ta connaissance non ?   Bref moi je dis en néophyte que je suis que ce site est bourré de scientifistes comme mon prof de maths qui n'arrive pas à s'adapter à une classe de 3ème parce que lui c'est une tête en classe prépa.   C'est pas comme ça qu'on donne envie aux gens de progresser   bonne journée

  • avatar

    Invité

    31 Juil 2009 à 19:26

    Génial, merci beaucoup !

  • avatar

    KOogar

    07 Juil 2009 à 01:20

    C'est simplement la dernière mise en cache de cette page qui a foirée. La variable counter est bien initialisé à 0

  • avatar

    Invité

    06 Juil 2009 à 18:13

    la variable counter n'est ni définie ni utilisée... en l'enlevant ça marche!
    aio!

  • avatar

    Invité

    20 Juin 2009 à 06:53

    ..et surtout réédité mon pste où j'ai fait pleins de fautes !!! (mille excuses)

  • avatar

    Invité

    20 Juin 2009 à 06:52

    Bonjour,
    Le script final (omplet) ne foncitonne pas. En effet il y a une erreur par rapport aux scripts que vous avez écris dans le cours.
    J'ai reprise les scripts écris dans la partie 1 et 2 et tout fonctionne maintenant.
    Je pense que le problème vient de là (rééditer votre code au complet !)
    Encore merci pour ces scripts Captcha,
    Cordialement
    Alexis

  • avatar

    Invité

    18 Mai 2009 à 04:48

    Ne pas accepter les cookies bypass le système, pourquoi ? :

    if ($secure == $_SESSION['securecode'])

    /*
    Si $secure est envoyé vide et que $_SESSION['securecode'] n'existe pas (n'accepte pas les cookies) ça retourne TRUE. Il faut donc tester les cookies préalablement.

  • avatar

    Invité

    29 Avril 2009 à 22:24

    Ce code doit marcher, je n'en doutes pas...sauf que je n'ai pas d'affichage de l'image qui doit être générée par securitecode.php,
    dans le formulaire une place "input name="secure" type="text" size="10" /" est réservé... sans image dedans...ou est le mystère et de quel nature est-il ?!

  • avatar

    Invité

    02 Mars 2009 à 10:24

    Bonjour,

    Je me pose une question bête et méchante :
    Si un spammeur utilise mon formulaire pour me spammer, je devrais reçevoir se spam sous la forme de la réponse, pré-formatée, à mon formulaire et ça devrait se présenter sous cette forme :

    NOM : Albert MACHINCHOSE
    email : xxx@yyyy.zz
    Sujet : Ceci-celà
    texte : Bla bla bla

    Or ce n'est pas le cas car le spam m'arrive sous une forme tout à fait standard.
    Donc le spammeur se contente de récupérer l'adresse email du site sans passer par la procédure d'envoi du formulaire.
    Dans ce cas, le codage me paraît inefficace.

    Toutefois, ce qui me défrise c'est que le spammeur se présente avec l'adresse email de mon site, ce qui donne un truc du genre : De monsite@monsite.com à monsite@monsite.com
    Je ne vais quand même pas mettre l'adresse email de mon site sur ma liste noire !

    Ce que je voudrais c'est interdire l'envoi du formulaire si la finale de l'email de l'expéditeur est @monsite.com, car les usurpateurs utilisent aussi parfois uniquement cette finale en la faisant précéder par ce qu'ils veulent...
    Mais je ne sais pas trop comment filtrer en interdisant l'envoi si la finale de l'expéditeur est @monsite.com.

    A noter que ma propre adresse email n'est pas au nom de ce site et qu'aucune autre boîte n'est ouverte sur ce suffixe @monsite.com, donc rien ne m'empèche de l'interdire systématiquement.

    Merci d'avance pour l'aide qu'on pourra m'apporter.

  • avatar

    Invité

    14 Jan 2009 à 20:56

    bonjour,
    je ne comprends pas comment on peut traiter les infos par la suite...ou doit on indiquer la page qui traite les informations qui se situe normalement dans la balise action? sinon on reste toujours sur la même page? j'ai du passer à côté de quelque chose...


 Autres snippets qui pourraient vous intéressez

Captcha PHP / JS basique via une simple addition

Compatibilité : PHP 5, PHP 7

Captcha similaire a Captcha basique via une simple addition, mais en y ajoutant un contrôle en JS.

Créer une vignette avec GD en se basant sur le type d'image - PHP Sources

Compatibilité : PHP 5, PHP 7

Créer une vignette sur la base du type d'image avec GD est simple en utilisant quelques fonctions clés que voici.

Texte multi-lignes sur une image avec une police PostScript Type1 - PHP Sources

Compatibilité : PHP 5, PHP 7

Dessine un texte de plusieurs lignes sur une image avec une police PostScript.

Ecrire un texte dans une image avec retour à la ligne automatique - PHP Sources

Compatibilité : PHP 5, PHP 7

Cette fonction vous permettra d'intégrer du texte sur une image avec un retour à la ligne automatique au bout d'une longueur de texte définie sans

Générateur d'images pour captcha

Compatibilité : PHP 5, PHP 7

Générateur automatique d'images pour Captcha. Le texte de la captcha est stocké dans une variable de session inaccessible côté client.

Présentation de PHP

PHP débutant et initié 50 Tutoriel

Présentation de MySQL

  19 Nov 2008

Information sur les mises à jour

Dernière mise à jour :

    19 Sept 2019
    fonctionnement du code vérifié

34 771 Vues
Compatibilité
PHP 5, 7 et 8+