Bouts de Codes PHP

Sécurité captcha protection anti spam

Information sur le code source PHP

Ecrit par :  PhpSources
Site de l'auteur Voir
Codes en PHP de l'auteur : [15] sources Voir
Enregistrement le 19 Nov 2008 - Vu 8286 fois
Impression: Imprimer le code
9
10

Description du code source

Information sur le code source

Il existe beaucoup de script de captcha sur le Net, des simples et des plus compliqués. Celui ci est simple à mettre en place et il fonctionne très bien sur tout les navigateurs (IE, FireFox..)
La première partie doit être placé dans un fichier à part apelé securitecode.php
la seconde partie c'est votre formulaire de validation.

Pour plus d'information, lisez l'article en 2 parties sur ce générateur d'image Captcha:

PARTIE 1
PARTIE 2

Code Source



.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
.79
.80
.81
.82
.83
.84
.85
.86
.87
.88
 

<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Sécurité captcha protection anti spam                     */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts468-PHP.htm              */
/* Auteur         : PhpSources                                                */
/* Date édition   : 19 Nov 2008                                               */
/* Website auteur : http://www.phpsources.org                                 */
/*                                                                            */
/******************************************************************************/


// Créer un fichier securitecode.php dans lequel vous placer ce code :
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 source

Fonctions php / mysql PHP

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

Commentaires (10)
Nouveau message Invité
le 19 Nov 2008 à 14:14:00
Pour éviter les confusions il vaut mieux supprimer les lettres et chiffres proches comme 0 et O :


Code:
$liste = '123456789ABCDEFGHIJKLMNPQRSTUVWXYZ';
Nouveau message Invité
le 14 Jan 2009 à 20:56:00
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...confused
Nouveau message KOogar
le 14 Jan 2009 à 21:58:00
pas besoin de mettre le nom de la page en cours, la variable $_SERVER['PHP_SELF'] va s'en charger.

voir les variables de type $_SERVER
Nouveau message Invité
le 02 Mars 2009 à 10:24:00
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.
Nouveau message Invité
le 29 Avril 2009 à 22:24:00
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 ?!
Nouveau message Invité
le 18 Mai 2009 à 04:48:00
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.

:P
Nouveau message Invité
le 20 Juin 2009 à 06:52:00
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
Nouveau message Invité
le 20 Juin 2009 à 06:53:00
..et surtout réédité mon pste où j'ai fait pleins de fautes !!! (mille excuses)
Nouveau message Invité
le 06 Juil 2009 à 18:13:00
la variable counter n'est ni définie ni utilisée... en l'enlevant ça marche!
aio!
Nouveau message KOogar
le 07 Juil 2009 à 01:20:00
C'est simplement la dernière mise en cache de cette page qui a foirée. La variable counter est bien initialisé à 0

Poster un commentaire

:P :)
:wink: :lol:
:surprised: :confused:
:idea: :no:
Taille du texte:
Couleur:
 
Code de sécurité
Offres d'emploi
Librairie

Langages de programmation

La librairie est ouverte à tous et elle est accès principalement sur les langages PHP et MySQL. Vous trouverez aussi d'autres langages de programmation tel que le CSS, HTML, AJAX, ASP.. Plus de 300 références facilement accessibles. Visiter

  • PHP 5 - MySQL 5 - Ajax - Entrainez-vous à créer des applications professionnelles
  • MySQL 5 et PHP 5 : Maîtrisez les sites web dynamiques
  • HTML 4
  • PHP 5 - MySQL 5 - Ajax - Entrainez-vous à créer des applications professionnelles
  • PHP à 200% : 100 techniques pour dynamiser vos sites web
  • Flash dynamique (+ CD-Rom) : Programmation côté serveur avec ASP, PHP, XML et Generator
  • XHTML et les CSS - Maîtrisez les nouveaux standards du Web 2.0
  • HTML 4
  • PHP et MYSQL - MySQLi - PDO - Construisez votre application
  • PHP 5 : Solutions et composants open-source