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

Signaler
Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017
-
Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017
-
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

Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325
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é.


Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017

the same probleme
Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325 >
Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017

Heu... mouais....
montre donc ton code corrigé. ...sachant que. .. bien entendu tu as tenu compte de TOUTES mes remarques
..
Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017
>
Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020

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>
Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325
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                                                                 
Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017

ç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"
Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325 >
Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017

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
Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017

comment ? svp
Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325 >
Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017

Comment... QUOI ?
Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325 >
Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020

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>
Messages postés
8
Date d'inscription
vendredi 12 février 2016
Statut
Membre
Dernière intervention
21 avril 2017

merci ça marche