Partage
  • Partager sur Facebook
  • Partager sur Twitter

Image de sécurité sur formulaire

    9 décembre 2006 à 13:17:10

    Bonjour à tous :)
    Avant tout je souhaitais remercier le webmaster du site des zéros car grace à lui j'ai pu créer ma première page web en xhtml.(chose que je n'aurai certainement pas pu réaliser sans son aide).
    Je viens aujourd'hui pour demander de l'aide, cela fait plus d'une semaine que je galère à essayer de mettre une image "sécurité" sur un formulaire d'inscription et là je craque :euh: .
    J'ai lu, relu et rerere lu les différents tutos que l'on trouve sur le site des zéros, j'ai cherché sur le forum ... :euh: .
    Le code se compose de 3 pages :
    • verif_code_gen.php
    • verif_insc.php
    • inscription.php
    • index.php

    Je vais maintenant vous donner le contenu de chaque page :
    Page verif_code_gen.php
    cette page est à l'identique du tuto, rien à dire,tuto clair et net, l'image s'affiche correctement sur la page index.php :


    <?php
    // On crée la session avant tout
    session_start();

    // On défini la configuration :
    if(!IsSet($_GET['nbr_chiffres'])) {
         $nbr_chiffres = 6; // Nombre de chiffres qui formerons le nombre par défaut
    }
    else {
         $nbr_chiffres = $_GET['nbr_chiffres']; // Si l'on met dans l'adresse un ?nbr_chiffres=X
    }

    // Là, on défini le header de la page pour la transformer en image
    header ("Content-type: image/png");
    // Là, on crée notre image
    $_img = imagecreatefrompng('fond_verif_img.png');
    // On défini maintenant les couleurs
    // Couleur de fond :
    $arriere_plan = imagecolorallocate($_img, 0, 0, 0); // Au cas où on utiliserai pas d'image de fond, on utilise cette couleur là.
    // Autres couleurs :
    $avant_plan = imagecolorallocate($_img, 255, 255, 255); // Couleur des chiffres
    ##### Ici on crée la variable qui contiendra le nombre aléatoire #####
    $i = 0;
    while($i < $nbr_chiffres) {
            $chiffre = mt_rand(0, 9); // On génère le nombre aléatoire
            $chiffres[$i] = $chiffre;
            $i++;
    }
    $nombre = null;
    // On explore le tableau $chiffres afin d'y afficher toutes les entrées qu'y s'y trouvent
    foreach ($chiffres as $caractere) {
            $nombre .= $caractere;
    }
    ##### On as fini de créer le nombre aléatoire, on le rentre maintenant dans une variable de session #####
    $_SESSION['aleat_nbr'] = $nombre;
    // On détruit les variables inutiles :
    unset($chiffre);
    unset($i);
    unset($caractere);
    unset($chiffres);
    imagestring($_img, 5, 18, 8, $nombre, $avant_plan);
    imagepng($_img);
    ?>


    Voyons maintenant le code de la page verif_insc.php (je vous rappelle que j'ai essayé d'intégrer ce code dans la page inscription.php) Le tuto est une nouvelle fois bien fait (mais je crois que c'est vraiment moi qui me suis planté quleque part... forcément o_O )


    <?php
    session_start(); // L'image utilise les sessions, donc on les active ici car on as besoin de ces informations
    $debut_html = '<html>
    <head>
    <title>Inscription</title>
    </head>
    <body>
    <p>'
    ;
    $milieu_html = NULL;
    $fin_html = '</p>
    </body>
    </html>'
    ;

    if(IsSet($_POST['verif_code']) AND !Empty($_POST['verif_code'])) { // Le champ du code de confirmation a été remplis
         if($_POST['verif_code']==$_SESSION['aleat_nbr']) { // Si le champ est égal au code généré par l'image
              $milieu_html = 'Vous avez entré le bon code de confirmation !';
         }
         else {
              $milieu_html = 'Votre code de confirmation n\'est pas bon ! Merci de réessayer.<br /><a href="#" onclick="history.go(-1);">Retour</a>';
         }
    }
    else {
        $milieu_html = '
    Vous devez remplir le champ du code de confirmation !';
    }

    // Là, on affiche toute la source générée :
    echo $debut_html . $milieu_html . $fin_html;

    ?>   
     

    ensuite la page index.php où on retrouve les champs que le futur membre doit remplir (avec ce fameux code image de validité qui s'affiche sans probleme)


    <?php
    //Démarrage de la session (à mettre avant tout code xhtml)
    session_start();

    //Si la variable $_SESSION['logged'] n'existe pas on la créée.
    if (!isset($_SESSION['logged'])) $_SESSION['logged'] = false;

    //Inclusion du fichier contenant les identifiants de connexion à la base de données.
    require("config.inc.php");

    //Connexion à la base de données.
    mysql_connect($host, $username, $password);
    mysql_select_db($bdd_name);
    ?>
    <?php
    //Si la variable $_POST['connexion'] (bouton submit du formulaire) et la variable $_SESSION['logged'] vaut false (déconnecté) existent.
    if (isset($_POST['connexion']) && $_SESSION['logged'] === false)
    {
            //Vérification des autres variables.
            if (isset($_POST['pseudo'],$_POST['mot_passe']) && !empty($_POST['pseudo']) && !empty($_POST['mot_passe']))
            {
                    //Vérification du pseudo.
                    $pseudo = htmlspecialchars($_POST['pseudo']);
                    $mot_passe = htmlspecialchars($_POST['mot_passe']);
                   
                    //Requête comptant le nombre de pseudos $_POST['pseudo']
                    $sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM membres WHERE pseudo='".$pseudo."'");
                   
                    //Si le pseudo existe.
                    if (mysql_result($sql,0,'nb_pseudo') == 1)
                    {
                            //Vérification du mot de passe
                            //Information sur le compte du membre.
                            $sql_infos = mysql_query("SELECT id, mot_passe, confirmation FROM membres WHERE pseudo='".$pseudo."'");
                            $donnees = mysql_fetch_array($sql_infos);
                           
                            //Hashage du mot de passe.
                            $mot_passe_hash = md5($mot_passe);
                           
                            //Comparaison du mot de passe.
                            if ($mot_passe_hash == $donnees['mot_passe'])
                            {
                                    //On vérifie que le compte est confirmé.
                                    //Si $donnees['confirmation'] vaut 1.
                                    if ($donnees['confirmation'] == 1)
                                    {
                                            if (isset($_POST['souvenir']) && $_POST['souvenir'] == 'on')
                                            {
                                                //Temps d'expiration des cookies (1 an).
                                                $expire = time() + 3600 * 24 * 365;

                                                setcookie('pseudo', $pseudo, $expire);
                                                setcookie('mot_passe', $mot_passe_hash, $expire);
                                            }

                                            //Tout est bon, on connecte le membre.
                                            $_SESSION['logged'] = true;
                                           
                                            //Création de 2 variables de session, contenant des informations sur le membre.
                                            $_SESSION['id'] = $donnees['id']; //Id du membre.
                                            $_SESSION['pseudo'] = $pseudo; //Pseudo du membre.
                                           
                                            //Redirection vers la page membre.
                                            header("location: membres.php");
                                    }
                                    else
                                            echo 'Erreur : le compte n\'est pas confirmé !';
                            }
                            else
                                    echo '
    Erreur : le mot de passe est incorrect !';
                    }
                    else
                            echo '
    Erreur : le pseudo n\'existe pas !';
            }
            else
                    echo 'Erreur : veuillez remplir tous les champs !';
    }
    ?>
    <?php
    if ($_SESSION['logged'] === false)
    {
       if (isset($_COOKIE['pseudo'], $_COOKIE['mot_passe']))
       {
          //Vérification du pseudo.
          $pseudo = htmlspecialchars($_COOKIE['pseudo']);
          $mot_passe = htmlspecialchars($_COOKIE['mot_passe']);
                   
          //Requête comptant le nombre de pseudos $_POST['pseudo']
          $sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM membres WHERE pseudo='".$pseudo."'");
             
           //Si le pseudo existe.
           if (mysql_result($sql,0,'nb_pseudo') == 1)
           {
                 //Vérification du mot de passe
                 //Information sur le compte du membre.
                 $sql_infos = mysql_query("SELECT id, mot_passe, confirmation FROM membres WHERE pseudo='".$pseudo."'");
                 $donnees = mysql_fetch_array($sql_infos);
                           
                 //Comparaison du mot de passe et vérification que le compte est confirmé.
                 if ($mot_passe == $donnees['mot_passe'] && $donnees['confirmation'] == 1)
                 {
                       //Tout est bon, on connecte le membre.
                       $_SESSION['logged'] = true;
                       
                       //Création de 2 variables de sessio, contenant des informations sur le membre.
                       $_SESSION['id'] = $donnees['id']; //Id du membre.
                       $_SESSION['pseudo'] = $pseudo; //Pseudo du membre.
                                           
                       //Redirection vers la page membre.
                       header("location: membres.php");
                  }
            }
       }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
      <title>Les Prévisions à Monteux</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
      <link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="meteonline.css"/>

    <head>
    <title>Inscription</title>
    </head>
    <body>
    <form action="inscription.php" method="post">
    <p><label>Pseudo</label> : <input type="text" name="pseudo" /></p>
    <p><label>Mot de passe</label> : <input type="password" name="mdp" /></p>
    <p><label>Retapez votre MdP</label> : <input type="password" name="mdpv" /></p>
    <p><label>E-Mail</label> : <input type="text" name="email" /></p>
    <p><label>Retapez votre E-Mail</label> : <input type="text" name="emailv" /></p>
    <!-- On affiche l'image générée par notre script -->
    <p><img src="verif_code_gen.php" alt="Code de vérification" /></p>

    <p><label>Merci de retaper le code de l'
    image ci-dessus</label> : <input type="text" name="verif_code" /></p>
    <p><input type="submit" value="Inscription" /></p>
    </form>
    </body>
    </html>
    <?php
    //Déconnection de la base de données.
    mysql_close();
    ?>

    Et voici la dernière page, celle qui me pose problème : la page inscription.php Ici j'ai essayer de changer plusieurs fois le code mais en vain


    <?php
    //Identifiants de connexion à la base de données.
    require("config.inc.php");

    //Connexion à la base de données.
    mysql_connect($host,$username,$password);
    mysql_select_db($bdd_name);

    //On vérifie que la variable $_POST['inscription'] existe
    if (isset($_POST['inscription']))
    {
            //Traitement
    }

    //Déconnection de la base de données.
    mysql_close();
    ?>
    <?php
    if(isset($_POST['cle']))
    {
            if($_POST['cle'] == $_SESSION['chaine'])
            {
                    echo 'Votre nom est '. $_POST['pseudo'];
            }
            else
            {
                    echo 'Cle non identifié';
                    echo '<br /><a href="inscription.php">Ressayer</a>';
            }
    }
    else
    {
    ?>
    <?php
            //Si les variables contenant le pseudo, le mot de passe et l'email existent et contiennent quelque chose.
            if (isset($_POST['pseudo'], $_POST['mot_passe'], $_POST['email'], $_POST['verif_code']) && !empty($_POST['pseudo']) && !empty($_POST['mot_passe']) && !empty($_POST['email']) && !empty($_POST['verif_code']))
                   
            {
                    //Ici on vérifira que les variables contiennent le bon nombre de caractères.
            }
            else
            {
                    echo 'Erreur : vous avez oublié d\'entrer votre pseudo ou votre mot de passe ou votre adresse email ou code incorrect !';
            }
    ?>   
    <?php
                    //Si le pseudo est supérieur à 3 caractères et inférieur à 35 caractères.
                    if (strlen(trim($_POST['
    pseudo'])) > 3 && strlen(trim($_POST['pseudo'])) < 35)
                    {
                            //Si le mot de passe est supérieur à 4 caractères.
                            if (strlen(trim($_POST['
    mot_passe'])) > 4)
                                                   
                                                    // Si le champ est égal au code généré par l'
    image
                                                    if($_POST['verif_code']==$_SESSION['aleat_nbr'])
                            {
                                    //Enregistrement dans la base de données et envoi du mail de confirmation.
                            }
                            else
                            {
                                    echo 'Erreur : le mot de passe est trop court !';
                            }
                            else
                            {
                            echo 'Erreur : le pseudo est soit trop court, soit trop long !';
                            }
                                            else
                                            {
                                            echo 'Erreur : code de confirmation incorrect ou absent ';
                                            }
    ?>
    <?php
                                    //Mesure de sécurité.
                                    $pseudo = htmlspecialchars($_POST['pseudo']);
                                    $mot_passe = htmlspecialchars($_POST['mot_passe']);
                                    $email = htmlspecialchars($_POST['email']);

                                    //On vérifie que le pseudo n'existe pas.
                                    $sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM membres WHERE pseudo='".$pseudo."'");
                                    if (mysql_result($sql, 0, 'nb_pseudo') == 0)
                                    {
                                         //Hashage du mot de passe avec md5().
                                         $mot_passe = md5($mot_passe);

                                         //Génération du code de confirmation.
                                         $lettres_chiffres = 'abcdefghijklmnopqrstuvwxyz0123456789';
                                         $lettres_chiffres_melanges = str_shuffle($lettres_chiffres);
                                         $code_confirmation = substr($lettres_chiffres_melanges, 1, 10);
                                   
                                         //Envoi du mail de confirmation.
                                         $message = '
                                    Bonjour '
    .$pseudo.'<br />
                                    Vous venez de vous inscrire sur "MeteOnLine" et pour valider votre inscription, vous devez cliquer sur le lien suivant : <a href="http://meteonline.free.fr/connexion/confirmation.php?code='
    .$code_confirmation.'&amp;pseudo='.$pseudo.'">http://meteonline.free.fr/connexion/confirmation.php?code='.$code_confirmation.'&amp;pseudo='.$pseudo.'</a>
                                        '
    ;
                                   
                                        //Si le mail a été envoyé on peut enregistrer le membre
                                        if (mail($email, 'Confirmation de l\'inscription sur [Nom_du_site]', $message))
                                        {   
                                             //On éxécute la requête qui enregistre un nouveau membre.
                                             mysql_query("INSERT INTO membres (pseudo, mot_passe, confirmation, email, confirmation_code) VALUES ('
    ".$pseudo."', '".$mot_passe."', '0', '".$email."', '".$code_confirmation."')");
                                             echo '
    Message : votre compte a bien été créé ! Un e-mail vient de vous être envoyé contenant un lien de confirmation de votre inscription.';
                                       }
                                       else
                                       {
                                             echo '
    Erreur : echec lors de l\'envoi du mail ! veuillez vous ré-inscrire';
                                       }
                                   }
                                   else
                                       echo 'Erreur : le pseudo existe déjà !';
    ?>

    Dans la page inscription.php, j'ai souvent eu des erreur de code que j'ai à chaque fois essayer de résoudre. Il se peut que mainteannt le code ne ressemble plus à rien car j'ai tellement fait de modifs que j'en ai un peu (et même beaucoup) perdu les pédales :o .
    Voilà j'espère que quelqu'un me viendra en aide car je désespère là :( . Tous les soirs pas couché avant 1h00 entrain de chercher et de comprendre.
    D'avance merci
    Francois
    • Partager sur Facebook
    • Partager sur Twitter

    Image de sécurité sur formulaire

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown