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 :

utilisation de la fonction password_hash (), php 5.6


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut utilisation de la fonction password_hash (), php 5.6
    Salut,

    Sur mon site, j'ai un formulaire d'authentification par un pseudo et un mot de passe.
    mon but: est de cacher le mot de passe pour ne pas s'afficher dans l'URL

    j'ai utilisé la fonction password_hash (), mais il m'affiche des erreurs:

    cas1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $pseudo = $_POST['pseudo'];
    $password = $_POST['password'];
     
    // Pour le hachage du mot de passe
     
    $password = password_hash($password, PASSWORD_BCRYPT);
    $sql = "SELECT * FROM benmed.\"Utilisateurs\" WHERE pseudo='$pseudo' AND password=$password";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <br />
    <b>Warning</b>:  pg_query(): Query failed: ERREUR:  erreur de syntaxe sur ou près de « y$10$evGK9UcOel55m5H8XzwHGu7wJdINq5z9ve54PtWIcFENkJAAujze2 »
    LINE 1: ...&quot;Utilisateurs&quot; WHERE pseudo='omar' AND password=$2y$10$evGK9...
    cas2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM benmed.\"Utilisateurs\" WHERE pseudo='$pseudo' AND password='$password'";
    le code qui vérifie le mot de passe m'affiche un message d'erreur dans le mot de passe.
    et la réponse dans l'inspecteur : null

    où se trouve ma faute ?
    et comment savoir que l'exécution de cette fonction est réussie?

    merci d'avance

  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
    Les données POST ne sont pas dans l'URL donc je ne vois pas de quoi tu parles.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    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
    Ton but est de vérifier un mot de passe qui a été hashé avec password_hash avant insertion en base, c'est bien ça ? Le principe de password_hash est de ne pas retourner le même hash pour une même chaine
    Mots de passe sécurisés avec PHP 5.5

    Il faut donc que tu utilises password_​verify. Pour cela, on procède en deux étapes :
    Tu vas chercher les informations de ton utilisateur à partir du pseudo uniquement.
    Puis tu compares le mot de passe en base et le mot de passe tapé via password_verify:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql = "SELECT * FROM benmed.\"Utilisateurs\" WHERE pseudo='$pseudo'";
    // on récupère les infos en base
    // (...)
    $passwordBdd = $result['password'];
     
    if (password_verify($_POST['password'], $passwordBdd)) {
        echo 'youpi !';
    } else {
        echo 'oups ! Mauvais mot de passe';
    }
    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]

  4. #4
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Est ce que avec POST, je n'ai pas besoin d'hashage de mot de passe?

    à celira,

    le résultat après l'intégration de ton code était: oups ! Mauvais mot de passe{"id_utilisateur":"1","pse.....}

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Les mots de passe doivent être hashés avant de les enregistrer en BDD.

  6. #6
    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
    Pour compléter la remarque de jreaux et répondre à ta question :
    Tu utilises password_hash sur le mot de passe avant l'insertion en base
    Tu utilises password_verifiy pour comparer le mot de passe hashé stocké en base et le mot de passe tapé. Lorsque tu fais la vérification, tu n'appliques pas password_hash sur le mot de passe tapé.

    C'est bien ce que tu fais ?
    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]

  7. #7
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    merci à vos réponses

    si j'ai bien compris vos explication:

    dans ma base de données, j'ai une table s'appelle "utilisateur" où les informations comme "pseudo", "password", "email",.. sont déja saisis dans cette table.

    alors dans mon cas, je ne peux pas utiliser password_hash. Est ce que la méthode POST suffisante pour maquer le mot de passe?

    et comment peut on utiliser cette fonction avant saisir les données ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    donne des explications PRECISES.

    Tes mots de passe enregistrés en base de données sont :
    • "en clair" (lisibles)
    • ou "hashés" ?


    1/ Si il sont "en clair", alors c'est la mauvaise méthode.
    2 cas :

    1a/ tu laisses comme ça (mots de passe "en clair" en BdD)
    auquel cas, inutile de chercher à "cacher" le mot de passe lors de la connexion de l'utilisateur.

    1b/ tu corriges en BdD (= SECURITE des mots de passe EN BDD)
    Il faut hasher les mots de passe DANS la BdD, car c'est là qu'il faut les protéger.
    Un update des lignes de la table est nécessaire, avec utilisation de la fonction password_hash().


    2/ Si ils sont déjà "hashés", alors c'est la méthode décrite par Celira qui convient.

  9. #9
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    en fait, mon cas est la première.

    merci beaucoup jreaux62, une bonne et claire explication.

  10. #10
    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
    Pour compléter la réponse : la méthode $_POST ne masque rien du tout. La seule différence entre POST et GET est que GET met les informations directement dans l'URL alors que POST les met dans le corps de la requête.

    Demander si la méthode POST masque mieux le mot de passe que la méthode GET revient à demander si pour donner ton mot de passe à quelqu'un qui va le taper à ta place, il vaut mieux l'écrire sur un post-it ou le dicter à haute voix.
    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]

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

Discussions similaires

  1. Créer un warning sur l'utilisation d'une fonction PHP
    Par Gwen_59 dans le forum Langage
    Réponses: 7
    Dernier message: 14/05/2013, 15h09
  2. Utilisation d'une fonction php via JavaScript
    Par Tablen dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/05/2013, 23h25
  3. [Système] utilisation de la fonction system en PHP
    Par zazou19 dans le forum Langage
    Réponses: 6
    Dernier message: 05/08/2008, 00h59
  4. [Mail] utilisation de la fonction mail en php
    Par chti_juanito dans le forum Langage
    Réponses: 4
    Dernier message: 03/05/2008, 10h57
  5. [MySQL] Soucis lié à l'utilisation d'une fonction PHP
    Par tochbee dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/07/2006, 17h57

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