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é] login et message d'erreur


Sujet :

Langage PHP

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut [Sécurité] login et message d'erreur
    Bonjour à tous,

    J'ai repris une FAQ disponible sur ce site concernant l'utilisation des sessions dans un contexte d'authentification avec mot de passe.

    Le fichier principal est login.php, qui comprend une FORM avec deux champs (login et mot de passe) :

    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
    <FORM id='log' ACTION="auth.php3" method="POST" onSubmit='javascript:submit_pass();'>
    <TABLE CELLSPACING="0" BORDER="0">
    <TR>
    <TD WIDTH=20% ALIGN="LEFT" CLASS=ver012>
    Adresse e-mail : \n";
    </TD>
    <TD ALIGN="CENTER" CLASS=ver012>
    <INPUT TYPE="text" CLASS="ver012" NAME='login'>
    </TD>
    </TR>
    <TR>
    <TD WIDTH=20% ALIGN="LEFT" CLASS=ver012>
    Code secret associ&eacute; : \n";
    </TD>
    <TD ALIGN="CENTER" CLASS=ver012>
    <INPUT TYPE="password" CLASS="ver012" NAME='passwd'>
    </TD>
    </TR>
    </TABLE>
    <INPUT type="submit" VALUE="Soumettre ces informations">
    </FORM>
    J'ai aussi un auth.php3 qui fait des tests, qui appelle le fichier login original si il y a une erreur et qui affiche une page protégée si succès.

    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
    <?php
     
    session_start();
     
    if (($_POST['md5']!='') && ($_POST['login']!=''))
    {
      $gd="\"";
      $sg="'";
      $login=$_POST['login'];
      $md5=$_POST['md5'];
      $host='localhost';
      $link = mysql_connect($host,"toto","toto"); 
      $ret = mysql_select_db("toto",$link);
      $query = "SELECT PHOTO_NOM, PHOTO_PATH, CODE_RECH FROM PHOTO_PERS WHERE LOGIN_RECH=".$gd.$login.$gd." AND PHOTO_ACTIVE='Y' ORDER BY NUM_ENREG";
      $result = mysql_query($query);
      if (mysql_num_rows($result) > 0) 
      {  
        $data = mysql_fetch_assoc($result);
        $password=$data['CODE_RECH'];
        if ($md5==md5($password))
        {
          $_SESSION['last_access']=time();
          $_SESSION['ipaddr']=$_SERVER['REMOTE_ADDR'];
          $_SESSION['user']=$login;
          header("Location: ./frmphprs_new.php3");
          die();
        }
        else
        {
          header("Location:./loginphprs.php3");
          die();
        }
      }
      else
      { 
        //echo "Rien trouve dans la base...<br>\n";
        header("Location: ./loginphprs.php3");
        die();
      }
    }
    else
    {
      header("Location: ./loginphprs.php3");
      die();
    }
    //echo "</BODY>\n";
    //echo "</HTML>\n";
    ?>
    Le problème, c'est que je voudrais envoyer un code d'erreur au fichier loginphprs.php3 suivant les différents cas. Ce code d'erreur serait affiché dans cette page originale.

    Dois-je ajouter une info de session ? Dois-je créer une forme dans auth.php3 ? Dois-je implémenter un cookie ?

    Bref, là, je suis sec...

    Merci d'avance de vos conseils.

    Cordialement,

    Philippe.

  2. #2
    Membre émérite 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
    Par défaut
    Salut

    Ton fichier d'identification, c'est login.php, ou loginphprs.php ?

    Enfin bref, dans tes header, tu fais passer une variable selon le type d'erreur :

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Location:./loginphprs.php3?erreur=type_1");
    Et dans le fichier qui contient le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ( (isset($_GET['erreur'])) && ($_GET['erreur'] == "type_1") ) {
    include(‘fichier_erreur_1.php’);}
    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ( (isset($_GET['erreur'])) && ($_GET['erreur'] == "type_1") ) {
    print("Vous n'êtes pas autorisés à accéder dans mon shop");}

  3. #3
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut Mais c'est bien sûr !
    Merci beaucoup !

    Ca fait tellement longtemps que je m'efforce à faire passer les infos en POST, que j'ai oublié que le GET existait !

    Je suis confus et merci beaucoup !

    En fait login.php et loginphprs.php, c'est pareil : je voulais expliquer de la manière la plus simple possible mon problème

    Bon ben j'utilise le get alors

    Merci beaucoup encore et bonne journée !

    Et hop, un post résolu (...quand je disais qu'il y avait que ça de vrai le post ).

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut Et en post
    Une toute chtite question :

    Je remarque que le passage de variable est visible dans l'url (ben ouais, c'est normal, c'est un passage en Get ).

    Cependant, j'aimerais que l'url de retour au module loginphprs.php3 ne soit pas visible, et donc, j'aimerais pouvoir passer une varialble en post.

    Voici ma question :

    Y'a-t-il moyen de passer une variable en post juste avant l'appel à la fonction header pour que la fonction appelée par header puisse récupérer le contenu de la dite variable ?

    En bref, comment passer le contenu de l'argument de la méthode GET -> POST ?

    D'avance, je vous remercie grandement des réponses que vous pourrez m'apporter et vous remercie d'ores et déjà pour l'aide fournie.

    Cordialement,

    Philippe.

  5. #5
    Membre émérite 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
    Par défaut
    Question :

    Comment se nomme ta page principale ?

    Exemple : accueil.php, index.php ?

    [EDIT]... elle a son intérêt.

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut Page principale...
    Ma page principale s'appelle index.html...

    Peux tu m'en dire plus, car, pour l'instant, je ne vois pas le rapport

    Veux tu dire par là que je dois changer ma page principale pour ajouter une configuration me permettant de passer des paramètres POST par l'intermédiaire de la fonction header du PHP ?

    Sinon, pour ne pas voir le passage de variable par GET, je pourrais éventuellement créer une page fantome avec un frame 100% à l'intérieur... Ceci dit, il me semble que ce genre de fantaisies n'est que modérément apprécié par le référencement GOOGLE : en effet, cet artefact est communément utilisé pour soumettre des mots clés ne reflétant pas exactement le contenu d'un site

    L'idéal serait donc bien de passer mon argument en POST pour que la fonction appelée par le header puisse récupérer l'info

    Merci de tes réponses.

    Cordialement,

    Philippe.

  7. #7
    Membre émérite 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
    Par défaut
    C'est vrai, c'est une solution que d'utiliser un framset, de façon à masquer toutes les variables passées en get dans l'url, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    <FRAMESET rows="100%,*"border=0 frameborder=0 framespacing=0>
        <FRAME SRC="index.php" MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=auto noresize>
    </FRAMESET>
    D'un point de vue utilisation (application intra-extranet), c'est plutôt confortable mais par rapport aux référencement, je reconnais que celà peut poser probléme... et même assuremment.

    Et enfin, si la method Get a les inconvénients cités, la method Post aussi car elle implique une validation du formulaire, même si les variables sont passées en hidden.

    La method Get répond cependant parfaitement en cas d'une redirection par header + variables.

    Si effectivement, celà pose un probléme naturel de sécurité, il reste la solution d'implémenter un systéme de gestion de session.
    Au bout du compte, ce n'est pas si compliqué.

    Je crois qu'on a fait le tour des différentes possibilités ?

    [EDIT] Il y a un truc quand même : je mélange pas les extentions html & php), soit ils sont tous en html, soit tous en php selon l'utilisation.
    Celà évite les mauvaises surprises.

  8. #8
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut Infos
    Si effectivement, celà pose un probléme naturel de sécurité, il reste la solution d'implémenter un systéme de gestion de session.
    Au bout du compte, ce n'est pas si compliqué.
    Qu'appelles-tu "système de gestion de session" ? C'est pas ce que je fais actuellement ? Veux tu dire que je peux déclarer une variable de session 'erreur' pour me retourner le code d'erreur adéquat entre ma page loginphprs et ma page auth.php3 ?

    Autrement dit une affectation de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['erreur']="type_erreur1";
    Avec, du coup, un traitement sur $_SESSION['erreur'] dans ma page de login au lieu de faire un traitement sur la variable GET... C'était à ça que tu pensais ?

    Moi, ça me semble pas mal : tu vois des inconvénients à utiliser cette méthode (sécurité/bugs/etc.) ?

    Merci de ton aide

    Philippe.

  9. #9
    Membre émérite 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
    Par défaut
    Citation Envoyé par the_clansman
    Qu'appelles-tu "système de gestion de session" ? C'est pas ce que je fais actuellement ? Veux tu dire que je peux déclarer une variable de session 'erreur' pour me retourner le code d'erreur adéquat entre ma page loginphprs et ma page auth.php3 ?

    Autrement dit une affectation de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['erreur']="type_erreur1";
    Avec, du coup, un traitement sur $_SESSION['erreur'] dans ma page de login au lieu de faire un traitement sur la variable GET... C'était à ça que tu pensais ?

    Moi, ça me semble pas mal : tu vois des inconvénients à utiliser cette méthode (sécurité/bugs/etc.) ?

    Merci de ton aide

    Philippe.
    Oui bien sur, c'est ce dont je pensais:

    Les sessions
    Perso, je n'y vois aucun inconvénient, bien au contraire, j'essaye de le mettre en application chaque fois que c'est nécessaire, et ça rend de grands services.

    Tu fais ce que tu veux avec un tel "système".

    Mais remarque mon précédent [edit]
    Celà se justifie car tu seras obligé de migrer tes pages vers l'extention php, au lieu de html, et toutes les contraintes que celà implique, les liens, etc...
    Mauvaise définition de départ.
    Pourquoi ? because tu ne peux pas mettre en début d'une page html un session_start();

  10. #10
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut Petite précision...
    Ok, j'ai compris : je vais donc essayer de définir l'erreur et l'envoyer par le $_SESSION_ID...

    Mais y'a juste un truc que j'ai pas capté : en quoi le fait que je sois en index.html est bloquant vu que je ne me sers pas des sessions dans cette page ? Tu veux dire que si je passe par cette page, toutes les infos de sessions seront effacées ? (le tableau $_SESSION en particulier ?)

    Sinon, je comprends pas : mon index.html est un ensemble de lien vers ma page de protégée : si une session est ouverte, la page protégée s'affiche avec le contenu protégé, sinon, la page de login est affichée par l'intermédiaire du header qui va bien...

    En fait, je vois pas ce que index.html va faire la dedans : il intervient à quel moment ?

    [EDIT] A moins que tu ais voulu parler de ton message de référence avec la frame 100% Dans ce cas, pas de problème : je n'utilise plus cette méthode à cause des problèmes GOOGLE. Ca apporte en effet plus de problèmes que ça en résoud et je tiens à mon référencement GOOGLE
    Pour info, tu peux taper 'photos basket sous Google, mon site est le 4e listé (sans compter le lien payant ). [/EDIT]
    Merci encore

    Philippe.

  11. #11
    Membre émérite 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
    Par défaut
    Disons que c’est une « règle » que je me suis fixée.
    Si j’ai une application qui comprend 10 fichiers et que la moitié sont des scripts php, je ferai en sorte qu’ils soient tous à l’extension php.
    Cela ne gêne en rien le balisage html, il n’y a que l’extension qui change.
    Mais si je souhaite plus tard reconsidérer l’application ( ou un site), je ne me poserai pas la question sur la compatibilité.
    Exemple :
    Pour un include ( ben oui, tu ne peux pas faire d’include dans un fichier à l'extension html.
    Rajouter une gestion de sessions ? et bien non plus.

    Qu’est-ce que ça change d’avoir que des fichiers php ? rien du tout, même pas au niveau des moteurs ou du référencement, si ce n’est que tu ne te poses plus de questions le jour où tu dois revoir tes structures.

    Ensuite, tes variables de session sont sujettes à se balader d'une page à l'autre pour l'exploitation.
    Tu ne pourras mettre un session_start uniquement sur les pages php.
    Si tu dois récupérer/ ou utiliser une de ces variables dans une page html, t'es dans les choux.

  12. #12
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut Ok merci...
    Ok, je vois mieux à présent...

    Ben tout est très clair et je te remercie grandement pour ce support : je te souhaite une bonne continuation.

    Merci pour tout.

    Cordialement,

    Philippe.

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

Discussions similaires

  1. Quel est le message d'erreur de Login?
    Par jojo86 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 13/09/2010, 11h35
  2. Réponses: 4
    Dernier message: 31/05/2010, 08h54
  3. message d'erreur au login
    Par Sh4dow49 dans le forum Linux
    Réponses: 0
    Dernier message: 09/10/2009, 10h19
  4. Les messages d'erreur sur un Login
    Par zooffy dans le forum ASP.NET
    Réponses: 12
    Dernier message: 18/01/2008, 13h55

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