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

PHP & Base de données Discussion :

les messages de mon index.php. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut les messages de mon index.php.
    bonjour, j'ai un problème avec les messages de mon index.php.
    Je m'explique:
    J'ai un formulaire d'identification que j'appelle index.php. Le problème, se situe au niveau des messages qu'il renvoit. J'aimerai empecher l'affichage de "champs vides" lorsqu'on tape l'url . En fait il ya 2 messages "champs vides" et "inexistant" lorsque l'utilisateur n'existe pas.
    1/-le formulaire : index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php 
    // initialisation de la session 
    session_start() ; 
     
    ?> 
    <html> 
    <head><title>Identification</title></head> 
    <body> 
    <table> 
        <form method="post" action="login.php"> 
        <tr><td colspan="2"><font color="red"><?php if (isset($_SESSION['message'])) {echo($_SESSION['message']);}?></font></td></tr></form ></table></body></html>
    2/- le formulaire login.php pour effectuer les controles sur la pa
    ge index.php
    Code : 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
    59
    <?php 
     
    // initialisation de la session 
    session_start() ; 
     
    include('variables.php'); 
    include('fonctions.php'); 
     
    // CONNEXION A LA BASE DE DONNEE 
    connexion(); 
    no_cache(); 
     
    $message = ""; 
     
    //on teste si les champs sont vides         
    if (empty( $_POST['pseudo'] ) && empty($_POST['passe'] ) ) 
    { 
    $message = 'champs vides'; 
    $_SESSION['message']=$message; 
    // REDIRECTION VERS LA PAGE ERREUR 
    header("Location: ".$pagelogin."?Message=".$_SESSION['message']); 
    } 
    else 
    { 
      // on les récupère 
      $pseudo = $_POST['pseudo'] ; 
      $passe = $_POST['passe'] ; 
     
     
    // ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET 
    // MOT DE PASSE SAISIS A LA PAGE INDEX.HTM 
        $requete=requete("select login from "._TABLE_." where login='".$pseudo."' and mdp='".$passe."'"); 
     
        // SI AUCUN ENREGISTREMENT NE CORRESPOND 
        if(mysql_num_rows($requete)==0) 
            { 
            // REDIRECTION VERS LA PAGE ERREUR 
            $message = 'inexistant'; 
             $_SESSION['message']=$message; 
     
            header("Location: ".$pagelogin."?Message=".$_SESSION['message']); 
     
            } 
        // SI LE LOGIN ET MOT DE PASSE SONT EXACTS      
        else 
            { 
     
         // on sauvegarde donc son nom dans la session 
          $_SESSION['nom'] = $pseudo; 
     
            // REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE 
        header("Location:".$pagelogged."?user=".$_SESSION['nom']); 
            }      
    } 
     
        // DECONNEXION MYSQL 
        deconnexion(); 
     
    ?>

  2. #2
    Membre averti Avatar de XtofRoland
    Profil pro
    Inscrit en
    Août 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 357
    Points : 392
    Points
    392
    Par défaut
    dans ta page index.php avant de faire ton echo $_SESSION['message']
    si il est isset() verifie qu'il est != 'champ vide'

    mais perso je repenserai la facon dont tu as codé tes tests.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    XtofRoland, si je fais ce test dans index.php, c'est que le test va se faire 2 fois
    par rapport au test de login.php, je fais d'abord un test pour le contenu des champs vides, ensuite je vérifie que la saisie existe bien dans la bd ou pas. je crois que c'est ce qu'il faut faire non ... si tu as une autre proposition, je suis ouverte! mais n'oublie pas l'objet de mon post. [/b]

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 154
    Points : 144
    Points
    144
    Par défaut
    j'a itester le code d'index.php en local chez moi et quand je tappe l'url dans le navigateur j'ai pas de message j'ai une page blanche...

    pour tes test pour celui qui test les champs vide tu as pas besoin de faire marcher le serveur avec une fonction en js qui test si les champ son vide tu gagne du temps car le test est effectuer coté client. (enfin je pense que c'est mieux)

    Code : 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
    <SCRIPT language="JavaScript">
     
    function Controle()
    {
    if(document.admin.login.value=='') // test login vide
    {
    alert('Le champ Login ne peut pas rester vide !');
    document.admin.login.focus();
    }
    else if(document.admin.motdepasse.value == '') 
    {
    alert('Le champ mot de passe ne peut pas être vide !');
    document.admin.motdepasse.value = '' ;
    document.admin.mordepasse.focus();
    }
    else
    {
    document.admin.method = "POST";
    document.admin.action = "sessions/acces.php";
    document.admin.submit();
    }
    }
     
    </script>

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    2 remarques :
    1) Pourquoi passes-tu ton message en GET et en SESSION ? Le GET me semble inutile, non ? De plus, ta variable $message est inutile, puisque tu l'affectes tout de suite à $_SESSION['message'].
    2) Tu ne valides pas les données de formulaire avant la requête sql. C'est un trou, que dis-je, un gouffre de sécurité. Tu es perméable à toute sql injection.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par Halukard
    pour tes test pour celui qui test les champs vide tu as pas besoin de faire marcher le serveur avec une fonction en js qui test si les champ son vide tu gagne du temps car le test est effectuer coté client. (enfin je pense que c'est mieux)
    Je ne suis pas d'accord. Une vérification de sécurité ne dois jamais s'effectuer uniquement côté client, elle doit toujours être doublée côté serveur. Que fais-tu sinon si js est désactivé ?
    Un principe intangible : ne JAMAIS faire confiance aux données transmises par l'utilisateur, de quelle nature que ce soit (post, get, cookies, fichiers...).

  7. #7
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    vg33
    Peux tu m'aider par rapport au:
    2 remarques :
    1) Pourquoi passes-tu ton message en GET et en SESSION ? Le GET me semble inutile, non ?
    2) Tu ne valides pas les données de formulaire avant la requête sql. C'est un trou, que dis-je, un gouffre de sécurité. Tu es perméable à toute sql injection.
    merci.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 154
    Points : 144
    Points
    144
    Par défaut
    1 - t variable de sessions tu peu les récupéré sur n'importe qu'elle page sans pour autant les avoir passé en parametre donc ton GET est inutile

    2 - je pense qu'il veu dire que tu n'a pas verifié l'intégrité des variable que tu utilise (ce qu'elle contienne) par exemple du code sql qui pourrai etre executé en plus.


    juste une question vg33 sur une requete comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select login from "._TABLE_." where login='".$pseudo."' and mdp='".$passe."'
    que l'utilisateur veuille rajouter un select un update ou autre la requete n'aura plus aucun sens et elle plantera a l'execution non?

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    et si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $passe = "xxx' OR '1' = '1";
    A ton avis il y a fumisterie ou pas ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 154
    Points : 144
    Points
    144
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $passe = "xxx' OR '1' = '1";
    ben le champ 1 n'existe pas techniquement dans la base donc meme si il passe les autres test a cause du or vu que le champ n'existe pas il doit retourné une erreur, enfin je pense a moins que le 1 ne soit pas considéré comme un champ et a se moment la oui légalité est vrai donc l'utilisateur est autentifier

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    le 1 n'est pas considéré comme un champ. Tu peux tester autre chose que des champs avec mysql, par exemple :

  12. #12
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    il fallait que je vide le $_SESSION['message']) et que je fasse un test.

    vider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<tr><td colspan="2"><font color="red"><?php if (isset($_SESSION['message'])) {echo($_SESSION['message']); unset($_SESSION['message']);}?></font></td></tr>

    autre test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((strlen(trim($_POST['pseudo']))==0 && strlen(trim($_POST['passe']))==0)  || ((empty($_POST['pseudo'])) && (empty($_POST['passe'])) ))
       { 
         $_SESSION['message']='champs vides';

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par Mr N.
    et si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $passe = "xxx' OR '1' = '1";
    A ton avis il y a fumisterie ou pas ?
    +1

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 154
    Points : 144
    Points
    144
    Par défaut
    oui ho ca va j'ai tort lol c'est pas la premiere et ca sera pas la derniere ^^ j'avais pas vu ca comme ca va falloir que je modifie qque truc dans mes script moi

  15. #15
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Il te suffit d'appliquer mysql_real_escape_string si tu es sous mysql et tu es prévenu des injection de ce genre car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $passe = "xxx' OR '1' = '1";
    après passage sous la dite fonction devient (ou un truc dans ce genre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $passe = "xxx\' OR \'1\' = \'1";
    Du coup il n'y a plus fumisterie car la requete est 'normale' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select login 
    from TABLE 
    where login='pseudo' 
    and mdp='xxx\' OR \'1\' = \'1'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/08/2014, 16h12
  2. Réponses: 1
    Dernier message: 15/08/2011, 15h55
  3. [PHP 5.2] Imposiible de retourner a mon index.php
    Par kubito dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2011, 12h42
  4. Comment afficher une fenetre d'info par dessus mon index.php
    Par bigdule dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/05/2009, 00h36
  5. Réponses: 6
    Dernier message: 25/11/2004, 15h16

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