[résolu]Authentification php surprenante...

Authentification php surprenante... [résolu] - PHP - Programmation

Marsh Posté le 08-12-2006 à 22:27:31    

Voici mon code pour Effectuer une authentification avec des session sur mon site.
Il marche ! Mais il ya un gros bug, je lutte depuis 3 jours.
 

Code :
  1. if(isset($_POST['username']) && isset($_POST['user_password'])){
  2.   $username_entre=$_POST['username'];
  3.   $user_password_entre=md5($_POST['user_password']); // On crypte le password entré pour le comparé avec celui contenu dans la base de donnée du forum
  4.   //******************************
  5.   //Connexion a la base de données
  6.   //******************************
  7.    
  8.    
  9.   mysql_connect("$host", "$login", "$mdp" ) or die("error" ); // Connexion à MySQL
  10.   mysql_select_db("forum" ); // Sélection de la base forum
  11.    
  12.   //###############################
  13.   $retour = mysql_query("SELECT * FROM phpbb_users WHERE username='$username_entre'" );//On verifie que le login entré existe dans la base de donnée
  14.   while ($data=mysql_fetch_array($retour))
  15.   {
  16.    
  17.    
  18.    
  19.    if( ($username_entre || strtolower($username_entre)) == $data['username'] && $user_password_entre == $data['user_password']){
  20.    $_SESSION['online']=$data['user_level'];
  21.    
  22.    $_SESSION['user_id']=$data['user_id']; //id de l'utilisateur
  23.    
  24.    $_SESSION['username']=$data['username'];//username
  25.    $_SESSION['user_password']=$data['user_password'];
  26.    
  27.    $_SESSION['user_level']=$data['user_level'];// Niveau de l'utilisateur admin = 1 | moderator= 2 | user = 0
  28.    $_SESSION['user_email']=$data['user_email'];
  29. echo $_SESSION['username']; //ON AFFICHE Le Nom de l'utilisateur en ligne
  30.    
  31.    }
  32.    
  33.   }
  34. }
  35. <form id="form1" name="form1" method="post" action="">
  36. <input name="username" type="text" value="login" size="7" />
  37. <input name="user_password" type="password" value="password" size="7" />
  38. <input name="send" type="submit" value="Log in" />
  39. </form>


 
 
 
Pour vous expliquer mon bug je vais prendre un exemple.
Comme vous avez pu le constater je fait une requete sur la table des utlisateurs d'un forum phpBB (ce compte sera aussi leur compte sur mon site).
 
Donc prennons un exemple avec 2 comptes (login / pass) :   toto / toto   puis       tata / tata
 
Je me connecte avec le compte toto, l'authentification se deroule avec succes.
Les variables de session suivantes existent alors:

Code :
  1. $_SESSION['online']=$data['user_level'];
  2.    $_SESSION['user_id']=$data['user_id']; //id de l'utilisateur
  3.    $_SESSION['username']=$data['username'];//username
  4.    $_SESSION['user_password']=$data['user_password'];
  5.    $_SESSION['user_level']=$data['user_level'];// Niveau de l'utilisateur admin = 1 | moderator= 2 | user = 0
  6.    $_SESSION['user_email']=$data['user_email'];


 
donc:
$_SESSION['username'] = 'toto';
 
Jusque ici pas de probleme (enfin il me semble).
 
Le probleme survient lorsque une autre personne vien s'authentifier avec un autre compte, par exemple : tata ( le compte toto étant deja authentifier).
Par conséquent dans la "normalité" il y aurai les comptes toto et tata de connectés.
 
Le souci c'est que les variables de sessions de toto sont écrasées par celle de tata.
 
Les 2 comptes connecté au site sont 2 comptes ayant pour login tata !!
Quand je suis tout seul sur le site il m'affiche "Welcome toto" puis tata vien s'authentifier.
Je rafraichi ma page, il m'affiche "Welcome tata".  :)
 
Que faire pour que plusieur compte tournent sans que les variables de sessions ne soit pas COMMUNES lol
 
Merci de votre aide.
thomas


Message édité par dragon38330 le 10-12-2006 à 12:37:16
Reply

Marsh Posté le 08-12-2006 à 22:27:31   

Reply

Marsh Posté le 08-12-2006 à 22:28:44    

voici le site dit...
 
http://jibberishgame.com.linux.oxi [...] &page=news
 
les comptes toto / toto, tata / tata marchent vous pouvez testé le bug :)

Reply

Marsh Posté le 08-12-2006 à 22:56:50    

les variabels de session sont communes aux personnes  qui utilisent la meme machine et le meme navigateur
 
si tu veux tester des logins simultanés avec un seul poste, loggue toi une fois avec firefox, une fois avec IE7 , une fois avec IE6 , une fois avec opera , ....

Reply

Marsh Posté le 08-12-2006 à 23:19:56    

La j'ai tésté sur le net !!
 
Jme suis logué sous le compte toto et j'ai demandé a un amis (adresse ip differente) de se connecter avec le compte tata.
Et bien les variables de session de toto sont ecrasé par celle de tata !!
 
QUE FAIRE??

Reply

Marsh Posté le 09-12-2006 à 08:17:41    

il est ou le session_start() ??

Reply

Marsh Posté le 09-12-2006 à 14:10:15    

Code :
  1. if( ($username_entre || strtolower($username_entre)) == $data['username'] && $user_password_entre == $data['user_password']){


Ce n'est pas comme cela que fonctionne l'operateur OU || en PHP.
(a || b) == c est faux
(a == c || b == c) est juste

Reply

Marsh Posté le 09-12-2006 à 19:09:10    

afbilou a écrit :

Code :
  1. if( ($username_entre || strtolower($username_entre)) == $data['username'] && $user_password_entre == $data['user_password']){


Ce n'est pas comme cela que fonctionne l'operateur OU || en PHP.
(a || b) == c est faux
(a == c || b == c) est juste


 
L'erreur viendrai de la?? je vais tester et je vous dit...
 
en ce qui concerne le session_start() jlai vu oublier dans le code que je vous ai présenté.

Reply

Marsh Posté le 09-12-2006 à 19:33:20    

J'ai rectifier j'ai mis ca: beacoup plus simple.
 

Code :
  1. if( $username_entre ==  $data['username'] && $user_password_entre == $data['user_password'])


 
ET Bien rien a faire ca ne marche toujours pas.
 
Je me connecte avec mon pc avec le compte toto.J'ai demandé a un pote sur msn de se loguer avec le compte tata.
 
Avant qu'il se connecte j'ai "Welcome toto" puis quand il se connecte je rafraichi la page j'ai "Welcome tata".
 
La variable de session $_SESSION['username'] valai 'toto' puis elle prend la valeur 'tata' lorsque mon pote se connecte (depuis une ip differente) avec le compte tata !!!
 
Que faire !!!

Reply

Marsh Posté le 09-12-2006 à 21:46:20    

deja j'ai pas compris le delire de :  
 
-prendre la liste des utilisateurs portant le nom entre (alors que normalement un seul correspont)
-puis ensuite tester si le password est bon
 
pq ne pas faire select 1 from tmpuser where user=? and password=? et voila ...

Reply

Marsh Posté le 09-12-2006 à 22:17:36    

red faction a écrit :

deja j'ai pas compris le delire de :  
 
-prendre la liste des utilisateurs portant le nom entre (alors que normalement un seul correspont)
-puis ensuite tester si le password est bon
 
pq ne pas faire select 1 from tmpuser where user=? and password=? et voila ...


 
Bah que faudrai t'il faire pour faire une authenfication dans les regles de l'art??  
Ta pas un bout de code?

Reply

Marsh Posté le 09-12-2006 à 22:17:36   

Reply

Marsh Posté le 09-12-2006 à 22:30:38    

Code :
  1. if(isset($_POST['username']) && isset($_POST['user_password'])){
  2.   $username_entre=addslashes($_POST['username']); //permet deviter une injection SQL /!\ important /!\
  3.   $user_password_entre=md5($_POST['user_password']); // On crypte le password entré pour le comparé avec celui contenu dans la base de donnée du forum
  4. //on crypte rien du tout , c un hash rien de plus....
  5.   //******************************
  6.   //Connexion a la base de données
  7.   //******************************
  8.    
  9.    
  10.   mysql_connect("$host", "$login", "$mdp" ) or die("error" ); // Connexion à MySQL
  11.   mysql_select_db("forum" ); // Sélection de la base forum
  12.    
  13.   //###############################
  14.   $query="SELECT id_user  FROM phpbb_users WHERE username='$username_entre' and password='$password';";                       
  15.                        $result = mssql_query( $query );
  16.                        if($row = mssql_fetch_row($result)){
  17.                              //$_SESSION[]=...
  18.                        }else{
  19.                               echo 'invalid password.';
  20.                        }
  21.                        ...
  22.                        
  23. }
  24. </form>


 
ca doit etre ca jme suis peut etre plante  
c le wk et je suis pas trop motivé
mais c surement mieux que ton truc...


Message édité par red faction le 10-12-2006 à 00:46:55
Reply

Marsh Posté le 09-12-2006 à 22:38:02    

Certainement merci !!

Reply

Marsh Posté le 09-12-2006 à 22:44:52    

c'est quoi ce "[strike]" ??

Reply

Marsh Posté le 10-12-2006 à 00:46:17    

oublie c une balise du forum qui est mal passée...

Reply

Marsh Posté le 10-12-2006 à 12:36:47    

C'est BON !! ca marche enfin. Je met le code pour d'autres...

Code :
  1. <?php
  2. session_start();
  3. $host="localhost";
  4. $login="root";
  5. $mdp="";
  6. if(isset($_POST['username']) && isset($_POST['user_password'])){
  7.            
  8.             $username_entre=addslashes($_POST['username']); //permet deviter une injection SQL /!\ important /!\
  9.             $user_password_entre=md5($_POST['user_password']);// On crypte le password entré pour le comparé avec celui contenu dans la base de donnée du forum  
  10.             //******************************
  11.             //Connexion a la base de données
  12.             //******************************
  13.              
  14.            mysql_connect("$host", "$login", "$mdp" ) or die("error" ); // Connexion à MySQL
  15.            mysql_select_db("forum" ); // Sélection de la base forum
  16.              
  17.  
  18.             //###############################
  19.       $result = mysql_query("SELECT * FROM phpbb_users WHERE username='$username_entre' and user_password='$user_password_entre'" );
  20.       $num_rows = mysql_num_rows($result);
  21.                       if($num_rows > 0){
  22.          
  23.       $data = mysql_fetch_assoc($result);
  24.                             $_SESSION['online']=$data['user_level'];
  25.       $_SESSION['user_id']=$data['user_id']; //id de l'utilisateur
  26.       $_SESSION['username']=$data['username'];//username
  27.       $_SESSION['user_level']=$data['user_level'];// Niveau de l'utilisateur admin = 1 | moderator= 2 | user = 0
  28.       $_SESSION['user_email']=$data['user_email'];
  29.                      
  30.                        
  31. }
  32. if(isset($_SESSION['online'])){ ?>
  33. Welcome <?php echo $_SESSION['username']; /*?>
  34. <a href="session_destroy.php" class="pink_10"><input type="button"  onclick="session_destroy.php" value="logout"></a>
  35. <?php*/
  36. }
  37. else{ ?> <br>
  38. <form id="form1" name="form1" method="post" action="">
  39.            <input name="username" type="text" value="login" size="7" />
  40.            <input name="user_password" type="password" value="password" size="7" />
  41.       <input name="send" type="submit" value="Log in" />
  42.    
  43.   </form>
  44. <?php
  45. }
  46. ?>


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed