Problerme authentification avec PHP ,Mysql on passant avec MD5

Résolu
razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017 - 25 févr. 2016 à 00:35
razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017 - 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>
A voir également:

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
25 févr. 2016 à 09:08
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é.


0
razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017
25 févr. 2016 à 19:27
the same probleme
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344 > razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017
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
..
0
razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
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>
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
Modifié par jordane45 le 26/02/2016 à 01:12
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                                                                 
0
razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017
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"
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344 > razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017
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
0
razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017
26 févr. 2016 à 16:25
comment ? svp
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344 > razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017
26 févr. 2016 à 16:28
Comment... QUOI ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
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>
0
razikabens Messages postés 8 Date d'inscription vendredi 12 février 2016 Statut Membre Dernière intervention 21 avril 2017
26 févr. 2016 à 16:58
merci ça marche
0
Rejoignez-nous