FAQ |
Kalender |
2009-10-09, 11:59 | #1 | ||
|
|||
Mycket flitig postare
|
Tjo.
Satt uppe hela natten och gav mig på sha1 och salt för första gången. Innan jag ställer min fråga här vill jag först påpeka att mina php-kunskaper är 0.1, och att jag normalt sett aldrig ger mig på sånt här. Men hur som helst, jag satt och pillade i ett script och lyckades få registreringen i scriptet till att sha1+salta lösenordet innan det sparades i db:n. Problemet jag nu sitter med är inloggningen där jag inte får det att fungera. Jag läste om hur man kunde göra via en engelskspråkig sida och det mesta var ganska simpla saker. Nu är problemet att när jag vänder proceduren för att kolla lösenordet som användaren skriver in är lika det som finns i db:n så fungerar det inte. Just den här kodsnutten får jag inte att fungera: $sql="select password,active from members where username='".$_POST['username']."'"; $result=mysql_query($sql); while($row=mysql_fetch_array($result)) { $dbpass=$row[0]; $active=$row[1]; } $salt="abcdefhijklmn"; $password=$_POST['password']; if($dbpass==sha1($salt.$password)) { Så min fråga är, vad kan det bero på? Har jag missat ngt. Tacksam för förslag, men försök gärna ge förslag om vad det är för fel på just denna, för jag tror inte att längre ombyggda koder för mig smartare just nu (har sovit 3 timmar) :P Tack! //AnOn |
||
Svara med citat |
2009-10-09, 12:21 | #2 | |||
|
||||
Klarade millennium-buggen
|
Citat:
PHP-kod:
|
|||
Svara med citat |
2009-10-09, 12:41 | #3 | ||
|
|||
Flitig postare
|
AnOn -> läs på om sql injections
|
||
Svara med citat |
2009-10-09, 13:10 | #4 | |||
|
||||
Klarade millennium-buggen
|
Ja precis, glömde kommentera det, men du borde verkligen validera indata innan du kör in det i ett mysq-query!
http://webdesignskolan.se/php/mysql_...njections.html |
|||
Svara med citat |
2009-10-09, 13:34 | #5 | ||
|
|||
Mycket flitig postare
|
Okej, ska jag lägga till mysql_real_escape_string då?
$password=mysql_real_escape_string($_POST['password']); exempelvis? |
||
Svara med citat |
2009-10-09, 13:36 | #6 | ||
|
|||
Medlem
|
Precis så, men gör detta endast på data som du sedan ska köra i SQL querys av olika slag. Du bör även kontrollera om ett siffervärde är ett siffervärde osv, förutsätt att användaren inte vet vad denna gör.
|
||
Svara med citat |
2009-10-09, 13:43 | #7 | ||
|
|||
Mycket flitig postare
|
Tack för svaren och tipsen. Känns dock som om jag behöver lösa just delen med sha1 o salt först, innan jag ger mig på det andra.
|
||
Svara med citat |
2009-10-09, 14:00 | #8 | ||
|
|||
Medlem
|
Läsning: http://us3.php.net/manual/en/function.sha1.php
Testa att köra salt och kontrollera manuellt om salten stämmer, kan vara små saker som att du inte har tillräcklig längd på fältet i databasen som strular. Lite exempel som jag tror ska vara duliga (otestat): //Definera salt $salt = "abcdefhijklmn"; //Ta emot formulärdata $user = mysql_real_escape_string($_POST['username']); $pass = mysql_real_escape_string(($_POST['pass']); //Salta lösen $pass_salted = sha1($salt.$pass)); $result_getUser = mysql_query("SELECT password,active FROM members WHERE username='$user' AND password = '$pass_salted'"); if (mysql_num_rows($result_getUser) == 0){ //Fel lösen eller ingen användare exit; } else { //Sätt session för inloggning eller visa hemlig sida } |
||
Svara med citat |
2009-10-09, 14:23 | #9 | ||
|
|||
Mycket flitig postare
|
Citat:
|
||
Svara med citat |
2009-10-09, 14:25 | #10 | |||
|
||||
Mycket flitig postare
|
Lägg helst saltet sist eller på båda sidorna (ändå bättre) för att försvåra bruteforce-attacker. Exempel:
$pass_salted = sha1($salt.$pass.$salt); |
|||
Svara med citat |
Svara |
|
|