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 :

Mot de passe sans BDD


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Points : 71
    Points
    71
    Par défaut Mot de passe sans BDD
    Bonsoir,

    je souhaite restreindre une partie de mon site avec un mot de passe unique en utilisant un simple login en php (je ne compte pas faire un niveau de sécurité "CIA"; si il est hacké ce n'est pas bien grave^^).

    J'ai beau chercher de partout, à chaque fois que j'utilise un script, que le mot de pase soit bon ou erroné il m'autorise l'accès à la page en question.

    Voici ce que j'ai mis dans la page où l'on doit s'identifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <body>
     
    identification
     
    <form action="testmdp.php" methode="post" > 
    <input type="text" name="motdepasse" /> 
    <input type="submit" value="envoyer" /> 
    </form> 
     
    </body>
    Et voici ma page testmdp.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
    <body>
     
    <? if ( $_POST['motdepasse']!= 'toto' ) 
    { 
    header ("Location: testmdp.php"); 
    echo 'ok'; 
    exit(); 
    }else {echo "Mauvais mot de passe";} 
    } 
    echo 'Veuillez saisir votre mot de passe: <br>'; 
    echo '<form name="motdepasse" method="post" action="' . htmlspecialchars($_SERVER['REQUEST_URI']) . '">'; 
    echo '<input type=password name="motpasse" size="10" value="" />'; 
    echo '<input type="submit" name="action onClick=(this.form)" value="OK">'; 
    echo '</form>'; 
    ?> 
     
    Salut et bienvenu !
     
    </body>
    Vous allez me dire j'ai surement fais une grosse bourde mais il y a au moins 6 mois que je n'ai pas fait de php (et j'étais loin d'être un dieu avant ).

    Please help me !

    Edit : si vous avez en tete un code plus simple qui marche, je suis preneur.

    Edit 2 : j'ai testé un nouveau script qui me paraissait propre, mais ca ne marche toujours pas :

    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
    <?php
    if ( ($PHP_AUTH_USER=="eric") and ($PHP_AUTH_PW=="toto") )
         {$auth=true;} 
    else
         {$auth=false;}    
    if (!$auth) {
          header( 'WWW-Authenticate: Basic realm="Compte gestionnaire"' );
          header( 'HTTP/1.0 401 Unauthorized' ); 
          print "<html><head><title> ACCES NON AUTORISE</title></head><body>";   
          print "<center>Authentification nécessaire</center></html>";  
          exit;
    }
    else {
     
    header ("Location: private.php");
     
    }
     
    ?>
    Pour info : je fais mes tests sur wampserver 2.0

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    donc ... je reprend ton premier code :

    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
     
    <body>
     
    <? if ( $_POST['motdepasse']!= 'toto' ) // là tu dis Si le mot de passe n'est pas bon ...
    { 
    header ("Location: testmdp.php");  // le Header ne marcheras pas vu que tu as déja envoyé au moins une info au navigateur ("<body>")
    echo 'ok'; // ne sert à rien si tu lance un header qui fonctionne, cette partie ne s'affichera pas !
    exit(); 
    }else {echo "Mauvais mot de passe";} 
    } 
    echo 'Veuillez saisir votre mot de passe: <br>'; 
    echo '<form name="motdepasse" method="post" action="' . htmlspecialchars($_SERVER['REQUEST_URI']) . '">'; 
    echo '<input type=password name="motpasse" size="10" value="" />'; 
    echo '<input type="submit" name="action onClick=(this.form)" value="OK">'; 
    echo '</form>'; 
    ?>
    correction :


    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
     
     
    <? 
    $erreur = '';
    if ( $_POST['motdepasse'] == 'toto' ) // Si le mot de passe est bien la chaine "toto"
    { 
    header ("Location: pageSecurisee.php"); 
    exit(); 
    }else {$erreur = "Mauvais mot de passe";} 
    } 
    ?>
    <!doctype ... >
    <html>
    <body>
    <div id="alert"><?php echo $erreur; ?></div>
    Veuillez saisir votre mot de passe: <br /> 
    <?
    echo '<form name="motdepasse" method="post" action="' . htmlspecialchars($_SERVER['REQUEST_URI']) . '">'; 
    echo '<input type=password name="motpasse" size="10" value="" />'; 
    echo '<input type="submit" name="action onClick=(this.form)" value="OK">'; 
    echo '</form>'; 
    ?>
    ceci devrait tourner ! @++

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le deuxième corrigé :
    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
    <?php
    if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_USER']=="eric" && $_SERVER['PHP_AUTH_PW']=="toto") {
    	header ("Location: private.php");
    	exit();
     
    }
    else {
        sleep(2);
        header( 'WWW-Authenticate: Basic realm="Compte gestionnaire"' );
        header( 'HTTP/1.0 401 Unauthorized' ); 
        echo "<html><head><title>ACCES NON AUTORISÉ</title></head><body>";   
        echo "<center>Authentification nécessaire</center></html>";  
        exit;
    }
    ?>

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Points : 71
    Points
    71
    Par défaut
    Merci pour votre aide à tous les 2, mais ca ne marche toujours pas.

    Pour nours :

    Je n'ai pas touché à ma page d'identification (mdp.php), comme prévu, qui doit m'amener à testmdp.php si le code est bon.

    Pour ce qui est de testmdp.php j'ai fait les modifications que tu m'as proposé :

    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
    <? 
    $erreur = '';
    if ( $_POST['motdepasse'] == 'toto' ) // Si le mot de passe est bien la chaine "toto"
    { 
    header ("Location: testmdp.php"); 
    exit(); 
    }else {$erreur = "Mauvais mot de passe";} 
    } 
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Accueil IUP PVIA</title>
     
    </head>
    <body>
     
    <div id="alert"><?php echo $erreur; ?></div>
    Veuillez saisir votre mot de passe: <br /> 
    <?
    echo '<form name="motdepasse" method="post" action="' . htmlspecialchars($_SERVER['REQUEST_URI']) . '">'; 
    echo '<input type=password name="motpasse" size="10" value="" />'; 
    echo '<input type="submit" name="action onClick=(this.form)" value="OK">'; 
    echo '</form>'; 
    ?> 
     
    </body>
    </html>
    Que je rentre le bon ou le mauvais mot de passe, voici ce que j'obtiens :
    Notice: Undefined variable: erreur in D:\Programmes\wamp\www\testmdp.php on line 21

    Veuillez saisir votre mot de passe:
    A noter, l'url dans la barre d'adresse apparu devient :

    Pour toi sabotage :

    j'ai une page standart avec un lien qui m'amene à mdp2.php. Cette mdp2.php, la voici la voila :

    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Accueil IUP PVIA</title>
     
    </head>
    <body>
     
     
    <?php
    if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_USER']=="eric" && $_SERVER['PHP_AUTH_PW']=="toto") {
    	header ("Location: index.php");
    	exit();
     
    }
    else {
        sleep(2);
        header( 'WWW-Authenticate: Basic realm="Compte gestionnaire"' );
        header( 'HTTP/1.0 401 Unauthorized' ); 
        echo "<html><head><title>ACCES NON AUTORISÉ</title></head><body>";   
        echo "<center>Authentification nécessaire</center></html>";  
        exit;
    }
    ?>
     
    </body>
    </html>
    J'ai aussi fait un test en ne mettant que la partie php dans le code (donc sans le doctype et le body et tout le reste), et le resultat est idem : je n'ai plus la petite fenetre d'identification qui souvre me demandant login et mot de passe, mais j'arrive directement à ma page censée etre sécurisée (index.php).

    Je deviens fou avec ces mots de passe...

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    curieux, tu demande un passage des données en post ... et elles arrives en GET !...

    Vires le onClick sur ton bouton submit qui ne sert à rien, et confirmes moi que la ligne 21 est bien :

    if ( $_POST['motdepasse'] == 'toto' ) // Si le mot de passe est bien la chaine "toto"


    D'où ma question, qui a t-il au dessus ??

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Points : 71
    Points
    71
    Par défaut
    J'ai viré le onclick comme tu me l'as demandé, ce qui me donne pour cette petite partie en php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?
    echo '<form name="motdepasse" method="post" action="' . htmlspecialchars($_SERVER['REQUEST_URI']) . '">'; 
    echo '<input type=password name="motpasse" size="10" value="" />'; 
    echo '<input type="submit"  value="OK">'; 
    echo '</form>'; 
    ?>
    (en gros j'ai viré tout le truc action=....)

    retest, sur mdp.php je rentre "toto", je valide, et ca m'amene à la page testmdp.php toujours avec le même message d'erreur.

    La ligne "if ($post....)" est la ligne 3et non à la 21. Le code source de la page testmdp.php est copié dans son intégralité dans mes messages précédents, donc la seul chose qu'il y a au dessus est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     <? 
    $erreur = '';
    if ( $_POST['motdepasse'] == 'toto' ) // Si le mot de passe est bien la chaine "toto"
    {
    Ma ligne 21 (en regardant sous dreamweaver pour ne pas me tromper de ligne^^) est celle la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="alert"><?php echo $erreur; ?></div>
    en esperant que ca puisse t'aider (à m'aider )

    Merci encore.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En fait de toute facon, le contenu protégé doit être dans la page qui demande le mot de passe (logique).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_USER']=="eric" && $_SERVER['PHP_AUTH_PW']=="toto") {
    // contenu restreint
    }

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Points : 71
    Points
    71
    Par défaut
    sabotage, apres de nombreux test j'ai fait un petit mix entre le code original et le tiens, ce qui donne :

    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
    <?php
    if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_USER']=="rico" && $_SERVER['PHP_AUTH_PW']=="toto")
         {$auth=true;} 
    else
         {$auth=false;}    
    if (!$auth) {
          header( 'WWW-Authenticate: Basic realm="Compte gestionnaire"' );
          header( 'HTTP/1.0 401 Unauthorized' ); 
          print "<html><head><title> ACCES NON AUTORISE</title></head><body>";   
          print "<center>Authentification nécessaire</center></html>";  
          exit;
    }
    else {
     
    header ("Location: mdp.php");
     
    }
     
    ?>
    Donc comme ca, ca marche très bien. Quand je vais sur mdp2.php on me demande le code, et si il est bon ca m'amene bien à ma page sécurisé (j'ai fait avec le header) et si c'est pas bon alors ca me redemande mon mot de passe

    Pourqui ai je mis un header ?
    Parce que si je ne le met pas, je dois tout coder ma page en php, du style si je veux mettre une phrase sur ma page je dois mettre "echo "blablabla";" ainsi dessuite car je ne sais pas si je peux fermer ma balise php pour afficher ma page.

    Enfin bref, avec cette redirection ca marche bien

    Accessoirement je me suis apercu que si je fermais la pageet que je la réouvrais plus tard, le mot de passe ne m'est plus demandé. Donc la chose, sur un pc publique si quelqun se connecte une fois à mdp2.php (et rentre le code) et que la personne derriere y va, il pourra aussi se connecter aux pages sécurisées sans entrer de mot de passe. P

    Ma question : peut on faire en sorte qu'a chaque fois qu'une personne va sur mdp2.php, il doit entrer son mot de passe meme si il vient d'y aller 4 minutes avant ?

    C'est accessoirement, donc si je n'ai pas de réponse dans 48h je mettrais résolu, mais ca m'arrangerait quand meme.

    Merci à vous deux pour votre aide, je suis arrivé à mes fins au final

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu fermes le navigateur il te redemandera le mot de passe.
    Si tu fermes juste un onglet, le navigateur renvoit le mot de passe tapé.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Points : 71
    Points
    71
    Par défaut
    parfait, merci

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    heu ... dans l'état rien n'empeche un utilisateur d'aller directement sur la page mdp.php vu que la vérification faite, on est routé vers la page sécurisée, mais que celle-ci ne vérifie pas notre authentification ^^

    Il va falloir envisager de mettre des session, ou de remonter le script dans l'autre sens en incluant la page sécurisée à celle vérifiant le mdp !...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Points : 71
    Points
    71
    Par défaut
    aye, petit problème : tout ceci marchait parfaitement sous wampserver pour l'identification :

    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
    <?php
    if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_USER']=="rico" && $_SERVER['PHP_AUTH_PW']=="toto")
         {$auth=true;} 
    else
         {$auth=false;}    
    if (!$auth) {
          header( 'WWW-Authenticate: Basic realm="Compte gestionnaire"' );
          header( 'HTTP/1.0 401 Unauthorized' ); 
          print "<html><head><title> ACCES NON AUTORISE</title></head><body>";   
          print "<center>Authentification nécessaire</center></html>";  
          exit;
    }
    else {
     
    header ("Location: /secu/accueil.php");
     
    }
     
    ?>
    (j'ai modif le header"location")

    Donc sous wampersver ca marche super, quand je click sur mon onglet "acces reservé" il m'ouvre bien la fenetre d'identification demandant identifiant et mdp, mais voila, j'ai mis tout ca en ligne et en ligne j'ai ce message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sdb/9/4/iuppvia/identification.php:1) in /mnt/107/sdb/9/4/iuppvia/identification.php on line 7
     
    Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sdb/9/4/iuppvia/identification.php:1) in /mnt/107/sdb/9/4/iuppvia/identification.php on line 8
     
    Authentification nécessaire
    J'ai essayé divers bidouillage, comme la supression de ces 2 lignes, mais rien en marche.

    Aidez moi s'il vous plait

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    la ligne 1 de ton fichier authentification.php doit contenir un espace, une ligne blanche, un caractère ou alors ton fichier est en UTF8 avec BOM (au lieu de sans)

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Points : 71
    Points
    71
    Par défaut
    Je ne suis pas sur d'avoir bien compris.
    Il suffit simplement que je descende <?php et ligne 2 pour avoir une ligne blanche en ligne ?

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    non "doit contenir" c'est la situation actuelle
    L'objectif c'est que ca ne soit pas le cas

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Points : 71
    Points
    71
    Par défaut
    Ah, en effet, c'etait encoder en UTF8 avec BOM. Foutu Dreamweaver :p. Voila, ca marche maintenant, encore merci pour ta rapidité et tes diagnostics/solutions toujours sans failles

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 15/04/2008, 10h01
  2. Changer mot de passe sans connaître l'ancien
    Par luckan dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/06/2007, 19h12
  3. Bloquer le pc avec un mot de passe sans quiter la session
    Par paterson dans le forum Windows XP
    Réponses: 2
    Dernier message: 11/11/2006, 21h16

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