Problerme authentification avec PHP ,Mysql on passant avec MD5 [Résolu]

razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention - 25 févr. 2016 à 00:35 - Dernière réponse : razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention
- 26 févr. 2016 à 16:58
Bonjour, j'ai un problème avec mon code php qui faire authentification avec md5
<?php session_start();	// Create the session, Ready for our login data. 
$username = $_POST['username'];
// Gets the username from the login.php page
$password = $_POST['password']; // Gets the plain text password.
$salt = "oijahsfdapsf80efdjnsdjp"; // our random string of text for our password salt ( I will talk about this at the end. )
// Add some salt to the users password.
$salt .= $password; // The password is now: oijahsfdapsf80efdjnsdjp_PLUS_THE_USERS_PASSWORD
$password = $salt; // Change the password var to contain our new salted pass.
// Encrypt the password. ( md5 it )
$password = md5($password); // our password is now encrypted. ( cannot be reversed on a rainbow table as we have a secret salt also.. ) ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title>
</head>
<body>
<?php
// Connect to your database
mysql_connect("localhost", "username", "password") or die(mysql_error());
$query = "SELECT * FROM users WHERE password = '$password' LIMIT 1";
$username = mysql_real_escape_string($username); // just to be sure.
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result))
{ $resusername = $row['username']; // username from DB
$respassword = $row['password']; // password from DB
$resemail = $row['email']; // email from db
}
// Are they a valid user?
if ($respassword == $password) {
// Yes they are.
// Lets put some data in our session vars and mark them as logged in.
$_SESSION['loggedin'] = "1";
$_SESSION['email'] = $resemail;
$_SESSION['username'] = $resusername;
echo "Congrats, Your logged in"; // YAY
}else{
// No, Lets mark them as invalid.
$_SESSION['loggedin'] = "0";
echo "Sorry, Invalid details"; // Nay
}
?>
</body>
</html>
Afficher la suite 

11 réponses

Répondre au sujet
jordane45 19268 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention - 25 févr. 2016 à 09:08
0
Utile
3
Bonjour,

1 - Tu utilises l'ancienne extension mysql considérée comme obsolète.... passes à mysqli ou à la pdo!
http://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

2a - Ta requête ne recherche que sur le password... hors... tu devrais aussi chercher sur le username
SELECT * 
FROM users 
WHERE password = '$password' 
   AND  username = '$username'
LIMIT 1


2b - Si cette requête retourne un résultat... ben c'est que c'est bon.
donc la ligne :
if ($respassword == $password) { 
est inutile
    • Sachant qu'ils étaient forcément identique...puisque ta requête faisait un WHERE dessus....



3 - Si tu as un souci pour la comparaison entre le password saisi par le user et celui de la BDD.... il faudrait aussi nous montrer comment tu as procédé pour l'enregistrer en BDD.


Commence par faire les 2 premières modifications que je t'ai indiqué et reviens nous voir avec le code modifié.


razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention - 25 févr. 2016 à 19:27
the same probleme
jordane45 19268 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention > razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention - 25 févr. 2016 à 19:29
Heu... mouais....
montre donc ton code corrigé. ...sachant que. .. bien entendu tu as tenu compte de TOUTES mes remarques
..
razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention > jordane45 19268 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention - 25 févr. 2016 à 22:26
désolée le code :
<?php session_start();	 
$username = $_POST['username'];
$password = $_POST['password'];
$salt = "oijahsfdapsf80efdjnsdjp";

$salt .= $password;
$password = $salt;

$password = md5($password);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title>
</head>
<body>
<?php

MySQLi_connect("localhost", "username", "password") or die(mysqli_errno());
$query = "SELECT * FROM users WHERE password = '$password'
AND username = '$username'
LIMIT 1";
$username = mysqli_real_escape_string($username);
$result = mysqli_query($query) or die(mysqli_error());
while($row = mysqli_fetch_array($result))
{ $resusername = $row['username'];
$respassword = $row['password'];
$resemail = $row['email'];
}

if ($respassword == $password) {

$_SESSION['loggedin'] = "1";
$_SESSION['email'] = $resemail;
$_SESSION['username'] = $resusername;
echo "Congrats, Your logged in";
}else{
$_SESSION['loggedin'] = "0";
echo "Sorry, Invalid details";
}
?>
</body>
</html>
Commenter la réponse de jordane45
jordane45 19268 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention - Modifié par jordane45 le 26/02/2016 à 01:12
0
Utile
5
Bon...
Il ne suffit pas de mettre un I à la suite de mysql pour transformer en mysqli ....

Voici le code reformaté plus proprement et normalement corrigé et fonctionnel :
je te laisse tester.


Déjà.. on place la connexion à la bdd dans un fichier à part
que tu n'auras qu'à inclure dans les pages où tu en auras besoin

<?php
$host = "localhost";
$user = "username";
$pwd  = "password"
$database = "ta_bdd";

//Fichier de linknexion à la bdd : cnxBDD.php
 $link = mysqli_connect($host,$user,$pwd,$database);

// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to linknect to MySQL: " . mysqli_linknect_error();
 exit();
}

?>


Le code de ta page

<?php
// Affichage des erreurs PHP
 error_reporting(E_ALL);

//Démarrage des Sessions
 session_start();  

//Récupération "propre" des variables
 $username = !empty($_POST['username']) ? $_POST['username'] : NULL; 
 $pwd = !empty($_POST['password']) ? $_POST['password'] : NULL; 
  
//Autre variable :
 $salt = "oijahsfdapsf80efdjnsdjp";  
 
//Ajout du SALT au PASSWORD
 $password = md5($salt.$pwd);   
    
 
//connexion à la BDD (import du fichier de linknexion)
 require_once("cnxBDD.php");

if($username && $pwd){
  // On prépare la requête pour vérifier si l'utilisateur existe et si le password est ok
  $sql = "SELECT * 
           FROM users WHERE password = '$password'  
           AND username = '$username'
           LIMIT 1"; 
  //execution de la requete :
  $result = mysqli_query($link,$sql);
   if(!$result){
   printf("Erreur : %s\n", mysqli_error($link));
   echo $sql;
   exit();
   }
  
 // Associative array
  $row = mysqli_fetch_array($result,MYSQLI_ASSOC);

 // Free result set
 mysqli_free_result($result);
 
  //fermeture de la connexion à la BDD
 mysqli_close($link); 
 
  if($row){
  //si il y a un resultat retourné par la requête :
    $_SESSION['loggedin'] = "1"; 
    $_SESSION['email'] =  $row['email'];
    $_SESSION['username'] = $row['username']; 
    $msg = "Congrats, Your logged in";  
 }else{
  //on détruit la session.
  // Utilisateur non trouvé dans la BDD
    session_destroy();
  $msg = "Sorry,  unknown User or invalid parameters";  
  }
 
}else{
  //on détruit la session.
 session_destroy();
 $msg = "Sorry, Invalid details"; 
}
//------------- FIN DU CODE PHP ------------------//
?>
<!-- Partie HTML de la page -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="linktent-Type" linktent="text/html; charset=utf-8" /> <title>Untitled Document</title> 
  </head> 
 <body> 
  <span>
   <?php
   //Affichage du MESSAGE
    if(!empty($msg)){
        echo $msg;
      }
   ?>
  </span>
  </body>
</html>


NB: tu remarqueras que j'ai séparé le code PHP du code HTML en le plaçant au début de ta page
Cela rend le code plus lisible et plus facile à maintenir.

Cordialement, 
Jordane                                                                 
razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention - 26 févr. 2016 à 12:27
ça marche pas j'ajoute
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
echo mysqli_num_rows($result)." -------";

le message est :"0 ------- Sorry, unknown User or invalid parameters"
jordane45 19268 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention > razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention - 26 févr. 2016 à 13:06
Tu peux faire un ECHO de la requête ?
puis :
- Nous l'afficher ici sur le forum
- La tester en DIRECT dans ta BDD pour voir si elle retourne quelque-chose

Merci
razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention - 26 févr. 2016 à 16:25
comment ? svp
jordane45 19268 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention > razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention - 26 févr. 2016 à 16:28
Comment... QUOI ?
jordane45 19268 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention > jordane45 19268 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention - 26 févr. 2016 à 16:30
Comment faire un ECHO ??
Voilou :
<?php
// Affichage des erreurs PHP
 error_reporting(E_ALL);

//Démarrage des Sessions
 session_start();  

//Récupération "propre" des variables
 $username = !empty($_POST['username']) ? $_POST['username'] : NULL; 
 $pwd = !empty($_POST['password']) ? $_POST['password'] : NULL; 
  
//Autre variable :
 $salt = "oijahsfdapsf80efdjnsdjp";  
 
//Ajout du SALT au PASSWORD
 $password = md5($salt.$pwd);   
    
 
//connexion à la BDD (import du fichier de linknexion)
 require_once("cnxBDD.php");

if($username && $pwd){
  // On prépare la requête pour vérifier si l'utilisateur existe et si le password est ok
  $sql = "SELECT * 
           FROM users WHERE password = '$password'  
           AND username = '$username'
           LIMIT 1"; 
  //execution de la requete :
  $result = mysqli_query($link,$sql);
   if(!$result){
   printf("Erreur : %s\n", mysqli_error($link));
   echo $sql;
   exit();
   }
  
//---------- LE TEMPS DES TESTS ---------------------------------------------------//
// Echo de la requête pour pouvoir s'en servir pour tester directement
// dans la BDD 
echo " <br> LA REQUETE EST : <br>".$sql;
//----------------------------------------------------------------------------------------------------//

 // Associative array
  $row = mysqli_fetch_array($result,MYSQLI_ASSOC);

 // Free result set
 mysqli_free_result($result);
 
  //fermeture de la connexion à la BDD
 mysqli_close($link); 
 
  if($row){
  //si il y a un resultat retourné par la requête :
    $_SESSION['loggedin'] = "1"; 
    $_SESSION['email'] =  $row['email'];
    $_SESSION['username'] = $row['username']; 
    $msg = "Congrats, Your logged in";  
 }else{
  //on détruit la session.
  // Utilisateur non trouvé dans la BDD
    session_destroy();
  $msg = "Sorry,  unknown User or invalid parameters";  
  }
 
}else{
  //on détruit la session.
 session_destroy();
 $msg = "Sorry, Invalid details"; 
}
//------------- FIN DU CODE PHP ------------------//
?>
<!-- Partie HTML de la page -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="linktent-Type" linktent="text/html; charset=utf-8" /> <title>Untitled Document</title> 
  </head> 
 <body> 
  <span>
   <?php
   //Affichage du MESSAGE
    if(!empty($msg)){
        echo $msg;
      }
   ?>
  </span>
  </body>
</html>
Commenter la réponse de jordane45
razikabens 8 Messages postés vendredi 12 février 2016Date d'inscription 21 avril 2017 Dernière intervention - 26 févr. 2016 à 16:58
0
Utile
merci ça marche
Commenter la réponse de razikabens

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.