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 :

[Sécurité] Script de login / pass avec sessions [Débutant(e)]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [Sécurité] Script de login / pass avec sessions
    Hello,
    J'ai un probléme sur la gestion des sessions.
    J'ai une base sql composée de cette sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Table membres : 
    username -> varchar 
    password -> varchar
    Dedans, j'ai inseré juste deux entrées : test/test
    ensuite, je peux prendre les informations suivantes :

    J'ai une page de connection en html suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     <html>
     <head>
     <title>login.html</title>
     </head>
     <body>
     <form name="login" method="post" action="verif_auth.php">
     Nom d'utilisateur:<input type="text" name="user_name"><br>
     Mot de passe:<input type="password" name="password"><br>
     <input type="submit" value="Envoyer">
     </form>
     </body>
     </html>
    Je ne fait juste un post sur verif_auth.php
    Jusque la, tout va bien.
    Maintenant je tente de récuperer les données suivantes :

    verif_auth.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
     
    <?php
    $user_name = $_POST['user_name'];
    $password = $_POST['password'];
    session_start();
     
    $db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion'.mysql_error());
    mysql_select_db('base', $db) or die(mysql_error());
     
    $query = "SELECT * FROM membres WHERE user_name=''.$user_name.'' AND password=''.$user_name.''";
     
    $result = mysql_query($query, $db);
    $affected_rows = mysql_num_rows($result);
     
    if($affected_rows == 1) {
     print 'Vous êtes authentifié';
     
    $_SESSION 'username' = $user_name; }
     else {
     print 'Accès refusé';
    }
    ?>
    Mais ... j'ai une page blanche. Je suis allé chercher un peu partout sur le net, mais je n'arrive pas a mettre le doigt sur cette simple erreur.

    merci de votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    et si tu fais un echo($query)??!! tu te rendras compte que ton code ne fonctionnera jamais

    essaye plutot ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $user_name = "'".$_POST['user_name']."'";
    $password = "'".$_POST['password']."'";
    et surtout ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT * FROM membres WHERE user_name=$user_name AND password=$password";

  3. #3
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Salut

    Et puis ceci n'est pas trés fonctionnel :

    Table membres :
    username -> varchar
    password -> varchar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "SELECT * FROM membres WHERE user_name=''.$user_name.'' AND password=''.$user_name.''";

  4. #4
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    c vrai, j'avais pas fais attention à ca aussi.
    en fait je lui avais corrigé une erreur sans le signaler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT * FROM membres WHERE user_name=''.$user_name.'' AND password=''.$user_name.''";
    bon dans ce cas ta requete pourra etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT * FROM membres WHERE username=$user_name AND password=$password"
    sans oublié les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $user_name = "'".$_POST['user_name']."'";
    $password = "'".$_POST['password']."'";
    un conseil de ma part : en cas de problème, essaye tjs d'afficher tes requetes, de voir ce qui ne va pas, et n'hesite pas de les exécuter à la main sur la base de données. Comme ca tu pourra identifier de la partie qui deconne car c pas tjs php (parfois c mysql, parfois php mais tres tres souvent (99,99%) nous meme).

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Points : 109
    Points
    109
    Par défaut
    Nom d'utilisateur:<input type="text" name="user_name"><br>
    mmmh, l'apostrophe devant utilisateur peut probleme probleme, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $user_name = "'".$_POST['user_name']."'";
    $password = "'".$_POST['password']."'";
    je comprend pas l'intêret de mettre une quote "' et '" à la fin.

    Normalement une simple déclaration tel que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user_name = $_POST['user_name'];
    devrai pas poser de problème

  6. #6
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    Normalement une simple déclaration tel que
    Code :
    $user_name = $_POST['user_name'];devrai pas poser de problème
    c'est malheureusement toute la différence entre devrait et va pas poser de problème. Moi je dis que ca va poser problème : tu n'as qu'à essayer un truc genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into maTable(var_varchar) values (toto);
    et tu verras jeune homme que mysql va gueuler un bon coup avec un truc genre :
    Unknown column 'toto' in 'field list'
    et il ne va pas la fermer que si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into maTable(var_varchar) values ('toto');
    d'où mes apostrophes!!!

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    mmmh, a force de trifouiller le code, je me suis fait avoir par moi même.
    En fait, je vient de tester, il renvoit bien les bonnes valeurs du post, mais j'ai toujours une page blanche

    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
    <?php
    session_start();
    $user_name = "'".$_POST['user_name']."'";
    $password = "'".$_POST['password']."'";
     
    include('mysql.inc.php');
    mysql_select_db('base', $db) or die(mysql_error());
     
     
    $query = "SELECT * FROM membres WHERE user_name=$user_name AND password=$password"; 
    echo($query);
     
     
    $result = mysql_query($query, $db);
    $affected_rows = mysql_num_rows($result);
     
     
     if($affected_rows == 1) {
     print 'Vous êtes authentifié';
     
     $_SESSION 'user_name' = $user_name; }
     else {
     print 'Accès refusé';
     }
     
     ?>
    Sachant que $db provient de mon include.
    La base est maintenant comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    user_name   	varchar(15)  	
    password  	varchar(15)
    Cependant, j'ai isolé le probléme. Il survient lors de la boucle du fond ( si je commente, mon echo passe bien ).

    Avec le code commenté de cette sorte :
    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
    <?php
    session_start();
    $user_name = "'".$_POST['user_name']."'";
    $password = "'".$_POST['password']."'";
     
    include('mysql.inc.php');
    mysql_select_db('iforco', $db) or die(mysql_error());
     
     
    $query = "SELECT * FROM membres WHERE user_name=$user_name AND password=$password"; 
    echo($query);
     
     
    $result = mysql_query($query, $db);
    $affected_rows = mysql_num_rows($result);
    echo '<br>'; 
    echo($result); 
    echo '<br>'; 
    echo($affected_rows);
     
     /*
    if($affected_rows == 1) 
     {
     print 'Vous êtes authentifié';
      $_SESSION 'user_name' = $user_name; 
      }
    
      else {
     print 'Accès refusé';
     }
    */
    ?>
    J'obtient ceci comme réponse :
    SELECT * FROM membres WHERE user_name='test' AND password='test'
    Resource id #4
    1
    Je comprend pas le ressource id # 4
    par contre, cela devrai fonctionner puisque avec test/test j'ai bien comme sortie 1 ... et 0 avec un mauvais pass.

    Merci de toute votre attention et conseil ! !
    Edit, je pense que cela vient de la session, je suis allé voir sur le site de php5 pour la documentation, mais je n'ai pu trouver d'informations concluante sur mon probléme

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    MMmh, je vais finir par en faire plein des requétes sur ce pauvre serveur sql avec tout les méssage que je vous laisse.
    L'érreur vient bien de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION 'user_name' = $user_name;
    pourtant au début de mon code j'ai
    Est ce que cela pourrai venir du fait que $user_name retourne 'test' et non test ?

  9. #9
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    tu sais ce qui est le plus difficile quand on repond à un message de ce genre : c'est quand celui qui pose la question ne sait pas ce qu'il cherche!

    je m'explique : à quoi ca peut te servir de faire quelque chose du genre absolument rien, du coup je vais pas commenter ta question
    Je comprend pas le ressource id # 4
    revenons aux choses serieuses : quand tu executes il t'affiche 1, c'est parfait ca veut dire que ca fonctionne, il est où le problème

    en voyant ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION 'user_name' = $user_name;
    je me dis pour l'amour du ciel faites une petite recherche sur internet avant de poster sur ce forum

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Salut,
    en fait, je me suis répondu a la question pour le result sql, je suis partit trops vite en besogne.
    Pour le script, il fonctionne, mais la session ne marche pas.
    J'ai rajouté :
    $utilisateur = "".$_POST['user_name']."";

    et
    $_SESSION 'utilisateur' = $utilisateur;
    car en fait, je voudrai que utilisateur soit égal a son nom ( donc test ) en l'occurence.

    Je suis allé matter la doc sur les sessions, mais je comprend pas pourquoi je ne peux pas stoker une variable entiére.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    http://www.php.net/manual/fr/function.session-start.php
    $_SESSION['time']    = time();

  11. #11
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION 'utilisateur' = $utilisateur;
    tu es sur que t'as lu un truc sur les sessions?!
    bon je repondrai à ton message mais apres je laisse la main aux autres
    $_SESSION['time'] = time();
    ce bout de code fonctionne tres bien et je ne sais pas qui t'as dis que les sessions ne peuvent stocker un entier?!
    par contre remplace ce truc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION 'utilisateur' = $utilisateur;
    par ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['utilisateur'] = $utilisateur;
    une derniere chose quand je t'ai dis de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user_name = "'".$_POST['user_name']."'";
    je repondais encore à ton problème de requete et pas les sessions

    bon courage

  12. #12
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION 'user_name' = $user_name;
    devrait s'ecrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['user_name']= $user_name;
    rien de bien compliqué

    Edit : Me suis fais prendre de vitesse (le temps de lire ce topic un peu tout zazimut...lol)

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    ça roule ! Je vous remercie beaucoup !
    Je vais faire plus attention a la syntaxe la prochaine fois.
    merci !!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/06/2007, 23h41
  2. Réponses: 2
    Dernier message: 17/09/2006, 19h21
  3. [Configuration] Problème avec un script de login utilisant une session
    Par HNT dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 27/09/2005, 19h56
  4. [IDHTTP] Problème avec la methode post (login:pass@ww.url)
    Par Rayek dans le forum Web & réseau
    Réponses: 5
    Dernier message: 11/07/2005, 10h03

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