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é] Mot de passes cryptés..


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut [Sécurité] Mot de passes cryptés..
    Bonjour à tous,

    Je développe présentement un site web en php, et je tente de faire fonctionner mon système de login/password, mais avec le mot de passe crypté.

    Je n'ai aucuns problèmes à le faire fonctionner sans cryptage, mais j'ai un petit problème avec le cryptage. Lorsque je crée une nouvelle entrée de compte, j'encrypte le mot de passe avant de l'envoyer dans la base de donnée à l'aide de la fonction $crypt, mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $pwrd = $_POST['txtPassword'];
     
    $pass = crypt($pwrd);

    Dans la base de donnée, le mot de passe apparait encrypté, donc la n'est pas le problème. Le problème viens du fait que lorsque je tente de me connecter, il ne reconnait pas le mot de passe lorsqu'il est encrypté.

    J'exécute le code suivant :

    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
     
    <?php 
    if (isset($_POST['login']))
    {
    	$pwrd = $_POST['password'];
     
    	mysql_connect(".............");
    	mysql_select_db("GOAccount");
     
    	$donnee = mysql_query("SELECT * FROM Users");
     
     
    	while ($valeur = mysql_fetch_array($donnee))
    	{
    		if ($_POST['login'] == $valeur['username'])
    		{
    			$pass = crypt($pwrd);
    			if ($valeur['password'] == $pass)
    			{
    				$_SESSION['Login'] = $valeur['username'];
    				$freebie = $valeur['username'];
    				echo("<p align='justify' class='texte'>Merci de vous être identifié, $freebie. Vous serez redirigé vers la page d'accueil d'ici 5 secondes... <a href='index.php' class='menu2'>Cliquez ici</a> pour y accéder dès maintenant. </p>");
     
    			}
    			else
    			{
    				echo("<p align='justify' class='texte'>Le nom d'utilisateur ou le mot de passe que vous avez entré est invalide. </p>");
    			};
    		};
    	};
            mysql_close();   
    }             
    else
    {
    	echo("<p align='justify' class='texte'>Veillez entrer un nom d'utilisateur et un mot de passe. </p>");
    };
    ?>
    En entrant le nom d'utilisateur et le mot de passe corrects, il me fait une erreur comme de quoi que mon mot de passe ou nom d'utilisateur n'est pas correct, mais il ne fait pas si j'encrypte pas le mot de passe avec la fonction crypt.


    J'imagine que sa ne fonctionne pas car la fonction crypt ne donnera pas toujours exactement la même chaine pour l'encryption d'un même mot de passe, et c'est pourquoi sa ne fonctionne pas, mais il doit forcément avoir une solution.

    J'ai une bonne base C++, mais je débute en php, donc je ne connais pas encore beaucoup de choses, et j'ai peut-être passé à coté d'un détail très insignifiant.

    J'aimerais avoir un peu d'aide avec cela, car je n'aime pas vraiment l'idée de laisser tous mes mots de passes non encryptés...


    Merci !

    -Winder

  2. #2
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Par défaut
    Salut,

    Alors je ne sais pas exactement ce que la fonction crypt fais mais je sais que pour crypter des mots de passe il est conseillé d'utiliser la fonction md5 ou alors encore mieux : hash(SHA256, $tonMotDePasse) car md5 n'est plus assez sûr paraît-il.

    Tu as aussi quelques erreurs de conception dans ta requête sql c'est pourquoi je me permet de te réécrire 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
    <?php 
    if (isset($_POST['login']))
    {
        $pwrd = hash(SHA256, $_POST['password']);
     
        mysql_connect(".............");
        mysql_select_db("GOAccount");
     
        $donnee = mysql_query("SELECT * FROM Users WHERE username = `".$_POST['login']."` AND password = `".$pwrd."`");
        $result = mysql_num_rows($donnee);                
     
        if($result == 1)
        {
            $_SESSION['Login'] = $valeur['username'];
            $freebie = $valeur['username'];
            echo("<p align='justify' class='texte'>Merci de vous être identifié, $freebie. Vous serez redirigé vers la page d'accueil d'ici 5 secondes... <a href='index.php' class='menu2'>Cliquez ici</a> pour y accéder dès maintenant. </p>");
        }
        else 
        {
            echo("<p align='justify' class='texte'>Le nom d'utilisateur ou le mot de passe que vous avez entré est invalide. </p>");
        }
     
        mysql_close();   
    }             
    else
    {
        echo("<p align='justify' class='texte'>Veillez entrer un nom d'utilisateur et un mot de passe. </p>");
    };
    ?>
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  3. #3
    Membre émérite Avatar de sharrascript
    Homme Profil pro
    Développeur Web indépendant
    Inscrit en
    Avril 2007
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web indépendant

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    Par défaut
    bonsoir,

    En effet suis le conseil de Yoteco.

    Sinon une petite astuce, car pour ma part il m'est arrivé de faire ce genre d'erreur.
    Je ne sais pas combien de caractère retourne la fonction crypt, mais assure toi que dans ta base de donnée tu ne limite pas de trop les caractères de ton pass, ce qui couperais le résultat escompté. Car quand j'ai commencé en PHP, je faisais d'abord des tests en clair et avait limité mes caractères à 20 pour un mot de passe, puis quand je suis passé au MD5, j'ai perdu du temps à trouver l'erreur alors qu'il me fallait augmenter le nombre de caractères possible pour le pass...

    Voilà bonne soirée ++

  4. #4
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Par défaut
    MD5 ==> 32 caractères.
    SHA256 ==> 64 caractères.

    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

Discussions similaires

  1. petit problème de mot de passe crypté PASSWORD()
    Par bris dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 09/02/2007, 17h01
  2. [Sécurité] Renvoyer un mot de passe crypté
    Par psychoBob dans le forum Langage
    Réponses: 6
    Dernier message: 23/04/2006, 01h43
  3. [Sécurité] mot de passe cryptée?
    Par kevinf dans le forum Langage
    Réponses: 8
    Dernier message: 01/11/2005, 15h02
  4. [FireFox / Sécurité] Mots de passe en clair
    Par arcane dans le forum Applications
    Réponses: 6
    Dernier message: 28/12/2004, 18h28
  5. Réponses: 4
    Dernier message: 29/11/2004, 23h53

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