Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/06/2007, 21h58   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 16
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 16
Points : 0
Points : 0
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 :
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 :
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
Winder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 22h15   #2
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

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

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
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 :
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>");
};
?>
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 23h02   #3
Membre émérite
 
Avatar de sharrascript
 
Homme Franck
Développeur Web indépendant
Inscription : avril 2007
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Franck
Âge : 31
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : avril 2007
Messages : 678
Points : 900
Points : 900
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 ++
__________________
LudiKreation Pour un web ludique et son Blog | CapRumbo pour un peu d'évasion | ChaOdisiaque Club Passion Rôliste |SierrElben le Jeu de rôle
sharrascript est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 08h10   #4
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

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

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
MD5 ==> 32 caractères.
SHA256 ==> 64 caractères.

Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h18.


 
 
 
 
Partenaires

Hébergement Web