IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[FORM] image de sécurité & SESSION


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Par défaut [FORM] image de sécurité & SESSION
    Bonjour,

    Je fais appel à vous concernant un soucis sur formulaire. J'ai utilisé un script de protection qui génère une image et permet d'éviter les spam de venir "pourrir" la boîte e-mail de l'amicale pour laquelle je travail.

    Je l'avais utilisé sur l'ancienne version du site et cela fonctionnait bien.

    code du script d'image de sécurité :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
     
     
    /************************* PRTOECTION ***********************************/
     
    // on démarre une session pour pouvoir mémoriser le code
    session_start();
     
    // on définit les caractères utilisés pour le code généré
    $liste = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    // génére le code en piochant dans les caractères de la liste
    $code = '';
    while(strlen($code) != 6) {
       $code .= $liste[rand(0,36)];
    }
    // on mémorise le code de 6 caractères généré en session
    $_SESSION['code']=$code;
     
    // on créé une image de 70 x 20 pixels (larg x hauteur)
    $img = imageCreate(70, 20) or die ("Problème de création GD");
    // Choix de la couleur de fond, ici ça donne du Gris ( RVB)
    $background_color = imagecolorallocate ($img, 238, 238, 238);
    // Choix de la couleur de la police, ici du noir
    $ecriture_color = imagecolorallocate ($img, 0, 0, 0);
    // le code la police utilisée
    $code_police=5;
    // on créé une image jpeg en empêchant la mise en cache
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header("Content-type: image/jpeg");
    // on introduit le code dans l'image
    imageString($img, $code_police,(70-imageFontWidth($code_police) * strlen("".$code.""))/2,0, $code,$ecriture_color);
    // on créé une image avec une qualité médiocre de 30%
    // pour éviter qu'un robot puisse la lire
    imagejpeg($img,'',30);
    // on libère la mémoire
    imageDestroy($img);

    Ce script est cencé mettre en Session, la variable 'code'

    Hors, lorsque la page du formulaire de contact s'affiche, le code généré est différent du contenu de la variable dans $_SESSION. Un simple echo me l'a montré...



    De plus, après validation du formulaire, la variable de session semble vide dans mon script d'envoi du mail.

    J'ai remarqué un autre point, lors d'un rafraichissement, [F5], la nouvelle variable de session, contient le code de l'image d'avant. bizarre non ?

    En terme de fonctionnement :

    Une page qui contient le formulaire.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <div id="contactForm">
    		<div class="loader"></div>
    		<div class="bar"></div>
        <form action="mail.php" class="contactForm" id="contactForm" name="cform" method="post">
     
      		<h1>Contactez Nous</h1>				
      		<label>Votre message nous sera transmis et nous vous répondrons dans les meilleurs délais.</label>
      		<label class="grey" for="name">Nom:<span class="name-missing">Veuillez indiquer votre nom</span></label>
      		<input class="field" type="text" name="name" id="name" value="" size="23" />
      		<label class="grey" for="e-mail">Email:<span class="email-missing">E-mail valide requis</span></label>
      		<input class="field" type="text" name="email" id="e-mail" size="23" />
      		<label class="grey" for="message">Message:<span class="message-missing">Votre message est vide...</span></label>
      		<textarea class="field" rows="" cols="" id="message" name="message"></textarea>
      		<label for="verif">Recopiez le code suivant&nbsp;<img valign="bottom" src="imagesecu.php" alt="image de protection" /></label>
      		<input class="field" type="text" name="verif" id="verif" value="" maxlength="6" />
      		<input type="submit" name="submit" value="Envoyer" class="bt_register"/>
      		<? echo ">>>>>>>>>> ".$_SESSION['code'] ; ?>
     
    		</form>	<!-- form : contactez nous -->
    		<script src="js/scripts_contact.js" type="text/javascript" charset="iso-8859-1"></script>	
    </div> <!-- contact form -->

    Un script JS qui test les champs.
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
     
       // script de validation du message
      $('.contactForm').submit( function(){
     
    		//statements to validate the form	
    		var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    		var email = document.getElementById('e-mail');
     
    		if (!filter.test(email.value)) {
    			$('.email-missing').show();
    		} else {$('.email-missing').hide();}
    		if (document.cform.name.value == "") {
    			$('.name-missing').show();
    		} else {$('.name-missing').hide();}	
    		if (document.cform.message.value == "") {
    			$('.message-missing').show();
    		} else {$('.message-missing').hide();}	
     
    		if ((document.cform.name.value == "") || (!filter.test(email.value)) || (document.cform.message.value == "")) {
    			return false;
    		} 
     
    		if ((document.cform.name.value != "") && (filter.test(email.value)) && (document.cform.message.value != "")) {
     
    			// on cache le formulaire
    			$('.contactForm').hide();
     
    			// on montre la barre de chargement
    			$('.loader').append($('.bar'));
    			$('.bar').css({display:'block'});
     
    			// envoi des requêtes ajax
    			$.post('mail.php',{name:$('#name').val(),
    							  email:$('#e-mail').val(),
    							  message:$('#message').val(),
    								verif:$('#verif').val()},
     
    			// renvoi des données
    			function(data){
    			  // cache la barre de chargement
    			  $('.bar').css({display:'none'});
    			  $('.loader').append(data);
    			});
     
    			//Attente de 6s, fermeture du formulaire et fade out
    			setTimeout('$(".loader").slideUp("slow")', 6000); 
     
    			// on montre le formulaire
    			$('.contactForm').show();
     
                          // on vide le formulaire
                           $('.contactForm')[0].reset();
     
     
    			// on le fait rester sur la page après envoi
    			return false;
    		} 
      });


    Si valide il envoi sur la page d'envoi de mail.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    include("datefr.php");
     
    if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) 
    {
     
         echo ">> ".$_SESSION['code']." - ".$_POST['verif']." <<" ; 
         // pour les tests la session renvoi vide, vérif renvoi bien son contenu
         exit();
    }
     
     
    if($_SESSION['code'] != $_POST['verif']) 
    {
       ...
    }
    else
    {
       ...
    }

    Quelqu'un aurait il une idée du pourquoi la session renvoi un mauvais contenu et aussi pourquoi elle se trouve vide après passage sur l'autre script ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Par défaut
    en parti résolu, le seul hic restant :

    après validation et envoi du mail ou retour en erreur car code invalide, il me faut recharger la page pour pouvoir ré-écrire... le bouton submit, ne fait plus effet.

Discussions similaires

  1. [Sécurité] Classe Session réutilisable
    Par Amnesiak dans le forum Langage
    Réponses: 7
    Dernier message: 25/02/2011, 13h10
  2. Génération d'image de sécurité (captcha) et système alternatif
    Par eric41 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 02/05/2006, 13h24
  3. [Sécurité] Image de sécurité
    Par castaka dans le forum Langage
    Réponses: 1
    Dernier message: 28/02/2006, 22h55
  4. [Sécurité] Sécurité des sessions
    Par nerik38 dans le forum Langage
    Réponses: 2
    Dernier message: 01/12/2005, 15h41
  5. [HTML] Mise en forme images
    Par eldindon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 02/06/2005, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo