Första sidan | Forum start | Logga in | Bli medlem |


php-kod för att tackla krypterade lösenord i MySQL

Forumet för dej som vill diskutera MySQL, Oracle och andra databaser till UNIX / Linux.

php-kod för att tackla krypterade lösenord i MySQL

Inläggav 3Gubben 17 oktober 2007, 16:37

Jag definierar användarlogin i min MySQL tabell mha
Kod: Markera allt
INSERT INTO mytable (mylogin,mypassword) VALUES ('pelle',password('ananas'));

så man inte kan läsa lösenordet i klartext.
Okrypterat hade i princip kodsnutten
Kod: Markera allt
$pw = $_POST['pw'];
$query = "SELECT mypassword FROM mytable WHERE mypassword= '$pw';";

räckt till om jag nu angett 'ananas' i mitt login-formulär.
Men nu har jag ju använt inbyggda MySQL funktionen password.
Hur kodar jag då php för att få en träff på mypassword?
3Gubben
 
Inlägg: 91
Blev medlem: 22 december 2003, 12:01

Inläggav erik_persson 18 oktober 2007, 17:12

password är en "funktion". Du kan helt enkelt använda detta senare!

För ditt exempel så kan du senare göra något liknande
select * from tabell where user='namnet' and pass=password('losenordet');

Om användaren inte finns med det lösenordet får du tillbaka den tomma mängden, och det kan du testa mot.

/erik
erik_persson
 
Inlägg: 1474
Blev medlem: 29 augusti 2002, 15:19

Inläggav 3Gubben 18 oktober 2007, 18:02

Hmm, jag fick det inte att fungera med den SELECT-satsen du föreslår.

Hittade till slut följande sida som förklarar saken!
http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html#function_password
Där står bl.a.om Password funktionen:
Calculates and returns a password string from the plaintext password str and returns a binary string, or NULL if the argument was NULL. This is the function that is used for encrypting MySQL passwords for storage in the Password column of the user grant table.
PASSWORD() encryption is one-way (not reversible).
The PASSWORD() function is used by the authentication system in MySQL Server; you should not use it in your own applications. For that purpose, consider MD5() or SHA1() instead.
3Gubben
 
Inlägg: 91
Blev medlem: 22 december 2003, 12:01

Re: php-kod för att tackla krypterade lösenord i MySQL

Inläggav Tenebrarium 14 november 2008, 14:08

Jag skulle använt att spara password hash-funktionen sha1 istället som man brukar(?) göra :)
Dvs.

Kod: Markera allt
// Lägga till användare
$salt1 = "brbainb034";
$salt2 = "x0labn";
$passwd_hash = sha1($salt1 . $_POST['password'] . $salt2);

// Skapa två salter för att känna igen hashen senare
$sql = "INSERT INTO  users (login, pass) VALUES ('" . mysql_real_escape_string($_POST['login']) . "', '" . mysql_real_escape_string($passwd_hash) . "')";
mysql_query($sql);


Sen för att kontrollera att lösenordet stämmer så skapar du samma hash igen
och jämnför med värdet i databasen.

De exempel salt's som anges i ex. koden är enkla. Bättre är att ange något som är unikt för användaren
som t.ex. tidpunkt (timestamp) då användaren skapades.
Mr. General Failure
Användarvisningsbild
Tenebrarium
 
Inlägg: 116
Blev medlem: 3 juli 2002, 13:09
Ort: Träsklandet


Återgå till Databas forum

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst