8790 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Bon... finalement j'ai repris l'intégralité en pas a pas.

Je suis parti du mot de passe non crypté. ok.
j'ai crypté md5... ok.
j'ai concaténé un salt non aléatoire...ok
j'ai crypté mdr le tout... ok
j'ai généré un salt aléatoire... ok (enfin ca semble fonctionner, va falloir poursuivre les tests pour confirmer).

Alors maintenant voici la situation :
je peux enregistrer login et mdp avec accents -> je peux me logguer
je peux enregistrer login avec caractères spéciaux comme par exmple "'@ , idem mot de passe avec caractères spéciaux --> avec mot de passe accentué et mot de passe avec caractères spéciaux, impossible de se logguer, mot de passe non reconnu...

En conclusion provisoire:
les accents c'st bon, les caractères spéciaux, c'est pas bon.

code enregistrement :

function user_register($user_name, $user_password, $user_email)
{
     // Obtenir une clé salt avec notre fonction generate_salt()
     $salt = generate_salt();

     // On crypte le mot de passe par méthode md5 et en incluant la clé salt
     $encrypted = md5(md5($user_password).$salt);

     // On récupère le timestamp
     $timestamp = time();

     // Pour finir, on enregistre les informations dans la base de données
     $query = "INSERT INTO user (user_name, user_password, user_salt, user_email, user_timestamp) VALUES ('$user_name', '$encrypted', '$salt', '$user_email', '$timestamp')";
     mysql_query ($query) or die ('Impossible de créer l\'utilisateur.' .mysql_error());
}


code de login :

function user_login($user_name, $user_password)
{
     // Tester et récupérer la clé salt de la base grace au login
     $query = "SELECT user_salt FROM user WHERE user_name='$user_name' LIMIT 1";
     $result = mysql_query($query);
	 if (mysql_num_rows($result) == 0)
     {
     echo 'Etes vous inscrits ? Avez vous suivi les indications incluses dans le mail de confirmation ?';
     }
     if (mysql_num_rows($result) > 0)
     {
          // On récupère l'utilisateur
          $user = mysql_fetch_array($result);

          // On encryte le mot de passe en utilisant la clé salt et on vérifie si ça correspond à la base
          $encrypted_pass = md5(md5($user_password).$user['user_salt']);

          // On teste l'utilisateur avec login et mot de passe crypté
          $query = "SELECT user_id, user_name, user_email FROM user WHERE user_name='$user_name' AND user_password='$encrypted_pass'";
          $result = mysql_query($query);

          if (mysql_num_rows($result) > 0)
          {
               $user = mysql_fetch_array($result);

               // On crypte les informations à stocker dans la session
			   $user_id = $user['user_id'];
               $encrypted_id = md5($user['user_id']);
               $encrypted_name = md5($user['user_name']);
               $user_email = $user['user_email'];
			   
               // Store the data in the session
               $_SESSION['userid'] = $user_id;
               $_SESSION['username'] = $user_name;
               $_SESSION['useremail'] = $user_email;
               $_SESSION['encrypted_id'] = $encrypted_id;
               $_SESSION['encrypted_name'] = $encrypted_name;

               // Return ok code
               return 'Correct';
          }
          else
          {
               return 'Le mot de passe est incorrect';
          }
     }
	 else
     {
     return 'Etes vous inscrits ? Avez vous suivi les indications incluses dans le mail de confirmation ?';
     }
}

Modifié par Gryzzly (04 Jun 2007 - 23:16)
Bon ben ça avance Smiley cligne ,

Le code a l'air correct... pour être sûr il faudrait voir le code complet pour voir ce qu'il se passe l'envoi des formulaires (inscription et login) et le traitement (tes 2 fonctions)...

Cela dit le plus simple serait peut-être de faire ce que suggère CPascal : remplacer tes variables $user_name et $user_password par htmlentities($user_name) et htmlentities($user_password) Smiley smile
a quel moment je dois passer tout en caractères web ? je dois le faire à la fois pour l'enregistrement et le login je suppose...

il me semble que j'avais testé... on va revoir ca de plus près... mais une question : si l'utilisateur se plante de mot de passe par exple, le formulaire réaffiche le login. si j'ai transformé avec htmlentities(), il va voir un truc bizarre ... des caractères inconnus à lui :s il va prendre peur et partir en courant non ?

a moins de ne transformer que si tout est ok... mais dans dans ce cas, si l'utilisateur se lante de mot de passe, j'ai remarqué que tous les caractères placé après un caractère spécial étaient viré de la chaine et le premier caractère spécial devenait un backslash...
-->
login : exempleéaxà'
mot de passe : il se plante
==> le login qui se réaffiche est celui là : exemple\

burk :s

dur dur d'apprendre sur le tas...
bon déjà html_entity_decode() est la fonction contraire de htmlentities()
tu aurais donc a l'appliquer quand tu réaffiche ton login.

mais que viens faire le login dans cette affaire? jusqu'ici je pensais que tu ne traitais que le password avec ton md5?

finalement je me demande si md5 est le pb......
normalement md5 est sensé donner une signature unique sur tous les types de fichiers accents @ ou pas.

a écrit :
dur dur d'apprendre sur le tas...


a qui le dis tu Smiley ravi
Modifié par CPascal (05 Jun 2007 - 00:15)
Gryzzly a écrit :
a quel moment je dois passer tout en caractères web
Dans ta page.php qui correspond à l'action de ton form (même principe pour inscription et login). Quelque chose comme :
if (isset($_POST['user_name']))
	{
	$user_name= htmlentities($_POST['user_name'], ENT_QUOTES);
	}
else
	{
	$user_name= '';
	}

if (isset($_POST['user_password']))
	{
	$user_password= htmlentities($_POST['user_password'], ENT_QUOTES);
	}
else
	{
	$user_password= '';
	}

Gryzzly a écrit :
je dois le faire à la fois pour l'enregistrement et le login je suppose...
Oui

Gryzzly a écrit :
si l'utilisateur se plante de mot de passe par exple, le formulaire réaffiche le login. si j'ai transformé avec htmlentities(), il va voir un truc bizarre ... des caractères inconnus à lui :s il va prendre peur et partir en courant non ?
Smiley lol normalement il devrait rester car un echo de ta variable $user_name devrait ressembler exactement à ce qu'il a saisi...

Gryzzly a écrit :
dur dur d'apprendre sur le tas...
je confirme Smiley ravi


*Edit pour CPascal : je pense que le decode n'est pas nécessaire pour l'affichage... et aussi que le md5 n'est pas le problème mais juste le login Smiley biggol
Modifié par Heyoan (05 Jun 2007 - 01:12)
CPascal a écrit :
bon déjà html_entity_decode() est la fonction contraire de htmlentities()
tu aurais donc a l'appliquer quand tu réaffiche ton login.

Ok, merci pour la fonction.

CPascal a écrit :
mais que viens faire le login dans cette affaire? jusqu'ici je pensais que tu ne traitais que le password avec ton md5?

Oui je ne traite que le password avec le hachage, mais j'ai plusieurs traitement aussi sur login (vérification d'existance dans la base, compte validé, etc...) et chaque fois qu'il y a une erreur, le formulaire est réaffiché : dans le cas de la connection, seulement le login / dans le cas de l'inscription : login + email

CPascal a écrit :
finalement je me demande si md5 est le pb......
normalement md5 est sensé donner une signature unique sur tous les types de fichiers accents @ ou pas.

j'ai oublié de tester les caractères spéciaux sans crytage :s et j'ai pas le courage de revenir en arrière :s on ne saura pas cette fois ci si ca vient de là !
Heyoan a écrit :
05 Jun 2007 - 00:21:15 // je cite tout Smiley langue pas la peine l'afficher hein

mais avec htmlentities, les caractères spéciaux deviennent leur code et s'affiche correctement. n'y a t il pas un probleme qu'en réalité dans cette situation, si l'utilisateur voit é , alors qu' il s'agit en fait de 8 caractères : é et donc si c'est le cas dans l'enregistrement il serait bloqué pour le login car ne s'en rend pas compte ??

va falloir tester tout ca...

dès que j'aurais reussi a recupérer les caractères spéciaux, ma zone membre sera complète et j'aurais plus qu'a creer le contenu Smiley smile
Modifié par Gryzzly (05 Jun 2007 - 00:44)
Gryzzly a écrit :
mais avec htmlentities, les caractères spéciaux deviennent leur code et s'affiche correctement. n'y a t il pas un probleme qu'en réalité dans cette situation, si l'utilisateur voit é , alors qu' il s'agit en fait de 8 caractères : é et donc si c'est le cas dans l'enregistrement il serait bloqué pour le login car ne s'en rend pas compte ??

Si tu transformes ta variable $user_name en htmlentities($_POST['user_name'], ENT_QUOTES) et que plus loin tu as :
<input name='user_name' value='<?php echo $user_name ?>'>
il n'y a pas de problème car la valeur envoyée par ton prochain submit sera bien é et pas &eacute; Smiley langue
Pages :