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 :

Comment faire pour ne pas afficher le mot de passe en dur dans un programme php ?


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut Comment faire pour ne pas afficher le mot de passe en dur dans un programme php ?
    Bonjour à tous,

    Lors d'une demande de connexion pour accéder à un site web il me faut un login et un mdp, j'ai réussi à faire cet étape mais l'inconvénient c'est que dans mon code le login et mot de passe apparaissent en dur de ce fait ce n'est pas très bien sécurisé.

    Est-ce qu'avec l'aide d'une Base de donnée ça pourrait fonctionner ?

    Voici mes deux codes :
    acces .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
     
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Page d'accueil</title>
        </head>
        <body>
            <h1><center><br> Accès à la base d'archivage </br></center></h1>
    		<p>Veuillez entrer l'identifiant et le mot de passe pour accéder à la base d'archivage :</p>
            <fieldset>
    		<form action="formulaire.php" method="post">
     
    			<p>
    			<label for="identifiant"> identifiant :</label> 
    			<input type="text" name="identifiant" /><br>
    			<label for="mot de passe"> mot de passe :</label> 
    			<input type="password" name="mot_de_passe" /><br>
                </fieldset>
    			<br></br>
    			<input type="submit" value="Valider" />
                </p>
    		</form>
        </body>
    </html>
    Et voici le second 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
    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
     
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>formulaire de la base d'Archivage</title>
        </head>
        <body>
        <?php
    if (isset($_POST['identifiant']) AND $_POST['identifiant'] ==  "root")
    	{
    		?>
          <?php
    	if (isset($_POST['mot_de_passe']) AND $_POST['mot_de_passe'] ==  "test") // Si le mot de passe est bon
       {
    ?>
     
            <h1><center><br> Formulaire base d'Archivage </br></center></h1> 
     
    <legend>Famille: </legend>
    <fieldset>
    <p>Choisissez une famille</p>
    <form action="identification_facture.php" method="post">
    		<a href ="identification_facture.php">Facture</a><br>
     
    <form action="identification_paie.php" method="post">
    		<a href ="identification_paie.php">Paie</a><br>
     
    <form action="identification_ordonnance.php" method="post">
    		<a href ="identification_ordonnance.php">Ordonnance</a><br>
    </fieldset>
    </form>
    </form>
    </form>
    <?php
     
        else // Sinon, on affiche un message d'erreur
        {
     
    		echo '<p>identifiant et mot de passe incorrect</p>';
        }
        ?>
           <?php
        }
        else // Sinon, on affiche un message d'erreur
        {
     
    		echo '<p>identifiant et mot de passe incorrect</p>';
        }
        ?>
     
     
        </body>
    </html>
    Et avec du sql j'ai testé ceci voici le 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
    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
    !DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>formulaire de la base d'Archivage</title>
        </head>
        <body>
        <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("test");
     
     
    if (!empty($_POST['login']) && !empty($_POST['password'])){
     
        $login = htmlentities($_POST['login']);
        $password = sha1(htmlentities($_POST['password']));
     
        $requete = mysql_query('SELECT id FROM login WHERE login = "'.$login.'" && password = "'.$password.'"');
        if(mysql_num_rows($requete))
        {
            echo 'Vous êtes bien connecté !';
        }
        else
        {
            echo 'Mauvais pseudo/mot de passe';
        }
     
        mysql_close(); // On ferme la connexion
    }
     <h1><center><br> Formulaire base d'Archivage </br></center></h1> 
    
    <legend>Famille: </legend>
    <fieldset>
    <p>Choisissez une famille</p>
    <form action="identification_facture.php" method="post">
    		<a href ="identification_facture.php">Facture</a><br>
    
    <form action="identification_paie.php" method="post">
    		<a href ="identification_paie.php">Paie</a><br>
    
    <form action="identification_ordonnance.php" method="post">
    		<a href ="identification_ordonnance.php">Ordonnance</a><br>
    </fieldset>
    </form>
    </form>
    </form>
      </body>
    </html>
    Voici le message d'erreur :
    ( ! ) Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\wamp\www\formulaire.php on line 9
    Call Stack
    # Time Memory Function Location
    1 0.0000 137840 {main}( ) ..\formulaire.php:0
    2 0.0000 138032 mysql_connect ( ) ..\formulaire.php:9
    J'ai crée une base de donnée test avec une table login contenant root et le mot de passe test crypté

    Je vous remercie pour votre aide.

    Cordialement

  2. #2
    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
    Utilise un hash et non le mot de passe en clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    if (isset($_POST['identifiant'], $_POST['mot_de_passe'])) {
         if ($_POST['identifiant'] ===  "root" && password_verify($_POST['mot_de_passe', $hash)) {
    le hash peut être stocké dans une base de donnée ... mais si la personne qui a accès au code a accès à la base de donnée, ou au script de connexion, ça n'apporte pas de sécurité en plus.
    Ca serait surtout nécessaire si tu as de multiples comptes à gérer.

    Le $hash est obtenu avec :
    http://php.net/manual/fr/function.password-hash.php

    Au passage :
    - utilise && au lieu de AND car ce dernier peut donner des résultats contre-intuitifs
    - utilise === au lieu de == pour comparer des chaines
    - l'extension mysql est obsolète, il faut utiliser PDO
    - sha1 est obsolète
    - htmlentities n'a rien à faire dans une authentification
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Bonjour,

    le message d'erreur n'a rien à voir avec le mot de passe. Les fonctions mysql sont obsolètes, il faut donc utiliser mysqli ou PDO.

    Si le pseudo et le mot de passe sont cryptés dans la base, il vous faut donc comparer leur cryptage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $requete = mysqli_query('SELECT id FROM login WHERE login = "'.<fonction de cryptage>($login).'" AND password = "'.<fonction de cryptage>($password).'"');
    De plus, il serait bien de ne pas utiliser root pour se connecter à MySQL mais un compte spécialement créé pour l'application et n'ayant que les droits nécessaires.

    De plus, une lecture de la page Utiliser une base de données pour sécuriser vos sessions pourrait être utile.
    Christophe

    Pensez à mettre quand c'est le cas.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Mais le mdp va être dans un premier en clair aussi non avec le système de hash ?

  5. #5
    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
    Dans un premier quoi ?

    Le code ou la base de donnée ne contient que le hash.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    L'utilisateur entre le mot de passe en clair, il arrive donc en clair sur le serveur Web (utiliser HTTPS pour sécuriser cela est conseillé). Ensuite, le serveur Web le code puis stocke le mot de passe crypté dans la base de données.
    Christophe

    Pensez à mettre quand c'est le cas.

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    il faut éviter le chiffrage des mots de passe et préférer le hashage après salage.
    Il est aussi préférable de renvoyer un lien de réinitialisation de mot de passe que le mot de passe en clair.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Et avec une injection SQL ?

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    C'est l'intérêt de PDO : utiliser des requêtes préparées pour se protéger des injections SQL (entre autres choses)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Membre averti
    Avatar de Dumbeldor
    Homme Profil pro
    Développeur Concepteur Banque postale / Ecole d'ingénieur Alternance
    Inscrit en
    Novembre 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Concepteur Banque postale / Ecole d'ingénieur Alternance

    Informations forums :
    Inscription : Novembre 2013
    Messages : 88
    Points : 301
    Points
    301
    Par défaut
    Oui, passe soit en PDO soit mysqli car l'extension mysql_connect est obsolette depuis PHP 5.5.0 et supprimé depuis PHP 7.0 donc autant prendre les bonnes habitudes En plus ça te permettra d'avoir une sécurité contre les injections SQL.
    N'oubliez pas de mettre un petit pouce vert si mon message vous a aidé !

Discussions similaires

  1. [Joomla!] Comment faire pour ne pas afficher le template Joomla
    Par fuhraih dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 16/02/2009, 17h49
  2. Réponses: 3
    Dernier message: 29/01/2008, 12h32
  3. Mot de passe en dur dans une page php, risqué?
    Par silver.spike dans le forum Langage
    Réponses: 1
    Dernier message: 19/12/2007, 11h47
  4. Réponses: 4
    Dernier message: 18/04/2007, 17h46
  5. Réponses: 3
    Dernier message: 16/12/2005, 12h13

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