Hallo Forum,
momentan habe ich ein Problem mit einer PHP-Programmierung (Planungsboard), welches ich übernommen habe und auf einen neuen Server portieren möchte/muss.
Innerhalb der (grausigen) Programmierung werden u.a. Benutzer angelegt und können sich natürlich auch am BE anmelden. Die Speicherung der Passswörter in der mySQL-Datenbank sowie der Login-Vorgang erfolgt über die PASSWORD-Funktion von mySQL (die hier eigentlich nicht verwendet werden sollte):
$val1 und $val2 sind die übergebenen Session-Variablen ($_REGUEST['...']), welche den eingegebenen Benutzernamen sowie das Passwort enthalten ... $con beinhaltet die Datenbankverbindung.
Auf dem alten Server hat alles funktioniert und die Passwörter wurden (wie ab mySQL 4.1 üblich) mit 41 Byte inkl. vorangestelltem * abgespeichert bzw. das übergebene Input-Passwort ($con2) zum Vergleich korrekt umgewandelt.
Auf dem neuen Server läuft (ebenfalls) mySQL 5.1 und es sollte auch hier genauso funktionieren ... tut es aber nicht ... immer nur 16 Byte.
Ein Test direkt über die mySQL-Konsole ...
... verläuft positiv und wandelt einen fiktiven String zu einem 41 Byte-Hash um (Server wurde also nicht mit der Option --old-passwords gestartet).
Hat jemand eine Idee bzw. was übersehe ich!
Sollten noch weitere Infos nötig sein, liefere ich diese gerne nach!
Vielen Dank!
momentan habe ich ein Problem mit einer PHP-Programmierung (Planungsboard), welches ich übernommen habe und auf einen neuen Server portieren möchte/muss.
Innerhalb der (grausigen) Programmierung werden u.a. Benutzer angelegt und können sich natürlich auch am BE anmelden. Die Speicherung der Passswörter in der mySQL-Datenbank sowie der Login-Vorgang erfolgt über die PASSWORD-Funktion von mySQL (die hier eigentlich nicht verwendet werden sollte):
PHP-Code:
...
/**
user login
*/
// Query abgesichert (Matu 04.06.2012)
$query2 = sprintf("SELECT `$acc_pw` FROM `$tbl_acc` WHERE `$acc_login`='%s' AND `$acc_lock` = '0'", mysql_real_escape_string($val1));
// Passwort aus DB holen
$user_result = mysql_query ($query2, $con);
$user_pw = mysql_result ($user_result, 0);
// Eingegebenes Passwort wandeln
$user_input_result = mysql_query ("SELECT PASSWORD('$val2')", $con);
// hier $user_input_pw => 16 Byte statt 41 Byte?!
$user_input_pw = mysql_result ($user_input_result, 0);
//So SOLLTE es aussehen: *0EC8F4EC2FD12DE7EB23DFB390D2FF8BE54FE624
...
if ($user_input_pw == $user_pw){ ... }
...
Auf dem alten Server hat alles funktioniert und die Passwörter wurden (wie ab mySQL 4.1 üblich) mit 41 Byte inkl. vorangestelltem * abgespeichert bzw. das übergebene Input-Passwort ($con2) zum Vergleich korrekt umgewandelt.
Auf dem neuen Server läuft (ebenfalls) mySQL 5.1 und es sollte auch hier genauso funktionieren ... tut es aber nicht ... immer nur 16 Byte.
Ein Test direkt über die mySQL-Konsole ...
PHP-Code:
mysql> SELECT PASSWORD('mypass');
Hat jemand eine Idee bzw. was übersehe ich!
Sollten noch weitere Infos nötig sein, liefere ich diese gerne nach!
Vielen Dank!
Kommentar