Si tienes un UNB forum instalado con cantidad de usuarios y quieres cambiar el sistema a phpbb, te encontrarás con que la contraseña no funciona debido al sistema kmd5 en UNB.
Encontré este problema con nuestros foros, y estuve trabajando en ello, y finalmente creo que funciona, pero necesito probarlo, y probarlo...
Estos son los pasos que seguí para hacerlo
1.- Cambié el tamaño de la columna password en la tabla phpbb_users ejecutando la siguiente sentencia SQL:
ALTER TABLE phpbb_users MODIFY user_password varchar(32);
2.- Cambié al directorio raíz de phpbb y abrí el fichero login.php. Ahí incluí la función unbCheckUserPassword del fichero session.lib.php de UNB forums. En login.php llamé a la función checkUserPassword.
function checkUserPassword($hashed, $stored)
{
// update old hashes
if (strlen($stored) == 34)
{
$stored = '{kmd5}' . $stored;
}
// compare passwords based on used hash method
if (substr($stored, 0, 6) == '{kmd5}')
{
// input password must be an MD5 hash
$stored = substr($stored, 6); // remove identifier
#$key = substr($stored, 0, 2);
#return $key . strtolower(md5($key . $hashed)) == $stored;
// retrieve key
$key = substr($stored, 16, 2);
// build keyed hash
$hash1 = strtolower(md5($key . $hashed));
$hash2 = substr($hash1, 0, 16) . $key . substr($hash1, 16);
return $hash2 == $stored;
}
return false;
}
3.- En la línea 124 cambié la condición. Antes del cambio la condición era:
if( (md5($password) == $row['user_password'] && $row['user_active'])
Ahora la condición es (la escribí en una línea):
if( (md5($password) == $row['user_password'] && $row['user_active']) || (checkUserPassword(md5($password),$row['user_password ']) && $row['user_active']))
4.-Cambié al directorio includes, ahí abrí usercp_register.php. He vuelto a incluir la función userCheckPassword. Aproximadamente en la línea 395 cambiamos la condición. La condición antigua era:
if ( $row['user_password'] == md5($password) ]
Ahora la condición es:
if ( ( checkUserPassword(md5($cur_password),$row['user_password'])!=1) xor ($row['user_password'] == md5($cur_password)))
Es un poco raro, pero tenemos que utilizar XOR porque si ambas condiciones son verdad, no es cierto para nosotros. Lo probé de esta manera, y aparentemente funciona.
No hay comentarios:
Publicar un comentario