Multidesk.be » Forums » PHP » Login probleem

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door BoeMan op zondag 27 april 2008 om 12:44:51.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Hallo, ik heb onlangs een login script probeen te schrijven.
alles werkte totdat ik de md5 voor mijn password te encrytede heb ingevoegd
Als ik nu naar main_login.php ga en druk op inloggen, dan vind hij check_login.php niet meer.
Maar als ik dan check_login refresh dan vind de hij het script wel en geeft de wrong username or password error
Ik hoop dat jullie me hiermee kunnen helpen.
Ik zal de code effe posten;)
als je wilt testen, ga je gang HIER!
user= test
pass= test

main_login.php (heb ze maar tussen php tags gezet, wist nie welke anders te gebruiken)(blush)
PHP
  1.  
  2. <style type="text/css">
  3. <!--
  4. .style1 {color: #FF0000}
  5. -->
  6. </style>
  7.  
  8. <table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
  9. <tr>
  10. <form name="form1" method="post" action="check_login.php">
  11. <td>
  12. <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
  13. <tr>
  14. <td colspan="3"><strong>Login <span class="style1">required</span> to access Admin member panel </strong></td>
  15. </tr>
  16. <tr>
  17. <td width="78">Username</td>
  18. <td width="6">:</td>
  19. <td width="294"><input name="username" type="text" id="username"></td>
  20. </tr>
  21. <tr>
  22. <td>Password</td>
  23. <td>:</td>
  24. <td><input name="password" type="text" id="password"></td>
  25. </tr>
  26. <tr>
  27. <td>&nbsp;</td>
  28. <td>&nbsp;</td>
  29. <td><input type="submit" name="Submit" value="Login">
  30. <input type="reset" name="Submit" value="Reset fields"></td>
  31. </tr>
  32. </table>
  33. </td>
  34. </form>
  35. </tr>
  36. </table>
  37.  


check_login.php
PHP
  1.  
  2. <?php
  3. $db_host="localhost"; // Host name, standard localhost
  4. $db_username=""; // Mysql username
  5. $db_password=""; // Mysql password
  6. $db_name=""; // Database name
  7.  
  8. // Mysql connect.
  9. mysql_connect("$db_host", "$db_username", "$db_password")or die("cannot connect to database");
  10. mysql_select_db("$db_name")or die("cannot select DB");
  11.  
  12. // Define $username and $password
  13. $username=$_POST['username'];
  14. $password=$_POST['password'];
  15.  
  16. // encrypt password
  17. $encrypted_password=md5($password);
  18.  
  19. $sql="SELECT * FROM login WHERE username='$username' and password='$encrypted_password'";
  20. $result=mysql_query($sql);
  21.  
  22. // Protext mysql injection
  23. $myusername = stripslashes($username);
  24. $mypassword = stripslashes($password);
  25. $myusername = mysql_real_escape_string($username);
  26. $mypassword = mysql_real_escape_string($password);
  27.  
  28. $sql="SELECT * FROM login WHERE username='$username' and password='$password'";
  29. $result=mysql_query($sql);
  30.  
  31. // Mysql_num_row is counting table row
  32. $count=mysql_num_rows($result);
  33. // If result matched $username and $password, table row must be 1 row
  34.  
  35. if($count==1){
  36. // Register $username, $password and redirect to file "login_success.php"
  37. session_register("username");
  38. session_register("password");
  39. header("location:login_success.php");
  40. }
  41. else {
  42. echo "Wrong Username or Password";
  43. }
  44.  
  45. ?>
  46.  
  47.  


login_succes.php
PHP
  1.  
  2. <?
  3. // Check if session is not registered , redirect back to main page.
  4. // Put this code in first line of web page.
  5.  
  6. if(!session_is_registered(username)){
  7. header("location:main_login.php");
  8. }
  9. else {
  10. echo "Login Successful"
  11. }
  12. ?>
  13.  


logout.php
PHP
  1.  
  2. <?php
  3. session_start();    //put this code on the first line of your page, else the logout won't work.
  4. ?>
  5.  


Met deze code hebik de db tabel aangemaakt:

CREATE TABLE `login` (
`id` int(4) NOT NULL auto_increment,
`username` varchar(65) NOT NULL default '',
`password` varchar(65) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

--
-- Dumping data for table `login`
--

INSERT INTO `login` VALUES (1, 'test', 'test');

Ik hoop dat julie de fout zien, want ik niet dus(blush)
^ Reactie #1 geschreven door BoeMan op zondag 27 april 2008 om 12:51:46.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Ow ik heb de fout gevonden, domme typfout ergen. sorry dat ik deze topic daarvoor aanmaak.
Maar hoe zie ik nu of mijn pass geëcrypted is?
^ Reactie #2 geschreven door Simon op zondag 27 april 2008 om 13:59:57.
Simon's avatar
Multiviteit: 3742
Je code zit nogal raar in elkaar. De eerste keer maak je een query aan waarmee je de gegevens selecteerd waarvoor het wachtwoord gelijk is aan de md5-hash van het ingevoerde wachtwoord. Het resultaat van de query sla je dan op in $result. Dan maak je dezelfde query aan, maar nu moet het wachtwoord enkel gelijk zijn aan het ingevoerde wachtwoord (niet de hash dus). Het resultaat sla je weer op in $result, dus je overschrijft je variabele. De eerste query heeft in dit geval dus niets van nut gehad.

In feite is het wel goed dat je die tweede query uitvoert, want met de eerste zou het niet werken. Als je je wachtwoord hashed met md5, moet het wachtwoord ook gehashed opgeslaan zijn in de database. Dat is net de bedoeling van md5, als iemand in je database geraakt heeft hij niet zomaar alle wachtwoorden omdat een md5-hash niet omgezet kan worden.
Als je dus op veilig wilt spelen, wis je die tweede query uit je code en sla je je wachtwoord gehashed op.
^ Reactie #3 geschreven door BoeMan op zondag 27 april 2008 om 14:21:23.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Dus ik zou in de 2e query de
PHP
  1. and password='$password'


moeten vervangen door

PHP
  1. password='$encrypted_password'


Of begrijp ik je mss verkeerd
^ Reactie #4 geschreven door Simon op zondag 27 april 2008 om 20:38:09.
Simon's avatar
Multiviteit: 3742
Dat kan je doen, maar dan heb je tweemaal dezelfde query en moet je dus 1 van de twee wissen.
Je kan dus ook gewoon de tweede query volledig wissen en enkel de eerste behouden.

Als je dit gedaan hebt zal je code wel niet meer werken. Je controleert namelijk of de md5-hash van de ingevoerde waarde gelijk is aan de waarde in de database, maar die waarde in de database is gewoon tekst en geen md5-hash. Je query zal dus niets teruggeven.
Zoals ik al gezegd heb, is dit een verkeerd gebruik van md5, je moet je wachtwoorden gehashed opslaan in de database zodat niemand kan achterhalen wat het wachtwoord is. Ze hashen nadat iemand ze ingevoerd heeft in een formulier haalt niets uit. De beveiliging zit in de database, niet in het formulier.
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen