[Php-avanzado] Problema con passwords

Maia Cordero maiacordero en gmail.com
Jue Sep 9 14:34:50 ART 2010


ah me olvidaba para verificar hago esto:

Desde PHP

if ( isset( $_POST['txtUsuario'] ) && ( preg_match( '/^[a-zA-Z0-9]{4,12}$/',
$_POST['txtUsuario'] ) > 0 ) ) {
$usuario = trim( $_POST['txtUsuario'] );
    } elseif ( isset( $_POST['txtUsuario'] ) ) {
$mensaje = 'El usuario debe tener enre 4 y 12 caracters';
    }

    if ( isset( $_POST['txtClave'] ) && ( preg_match(
'/^[a-zA-Z0-9]{4,12}$/', $_POST['txtUsuario'] ) > 0 ) ) {
$password = md5( $_POST['txtClave'] );
    } elseif ( isset( $_POST['txtClave'] ) ) {
$mensaje = 'La clave debe tener entre 4 y 12 caracteres';
    }

    if ( $usuario != '' && $password != '' ) {
        $datos_usuario = dbLogin( DSN_ADMIN, $usuario, $password );

// print_r( $datos_usuario );

if ( !is_array( $datos_usuario ) && $datos_usuario != '' )
    $mensaje = $datos_usuario;
elseif ( $datos_usuario == '' )
    $mensaje = 'USUARIO O CONTRASEÑA INCORRECTOS';
        else {
            $_SESSION['catalogo']['dsn'] = DSN_ADMIN;
    $_SESSION['catalogo']['usuario'] = $datos_usuario; //id_usuario, nombre
    header( 'location: abm_categorias.php' );
}
    }

__________________

function dbLogin( $str_dsn, $str_usuario, $str_clave ) {
        $cn =& MDB2::connect( $str_dsn );
        if ( !PEAR::isError( $cn ) ) {
            $consulta = 'call ' . DB_DATABASE . '.sp_login( ' . $cn->quote(
$str_usuario, 'text' ) . ', ' . $cn->quote( $str_clave, 'text' ) . ' );';
            $res = $cn->query( $consulta );
            if ( !PEAR::isError( $res ) )
                $salida = $res->fetchRow( MDB2_FETCHMODE_ASSOC );
                //$salida['id_user'] y $salida['nombre']
            else
                $salida = $res->getDebugInfo();
            $cn->disconnect();
        } else
            $salida = $cn->getDebugInfo();

        return $salida;
    }

______________

Desde MYSQL

delimiter //
create procedure sp_login( IN usuario VARCHAR(12), IN clave CHAR(32) )
begin
    select id_user, nombre
    from TB_Usuarios
    where login = usuario and pass = clave
    limit 1;
end; //
delimiter ;
grant execute on procedure sp_login to cata_admin en localhost;


*Yo trabajo usando stores y perl. Pero perfectamente podes hacerlo
ejecuntando la query desde php con mysql_query*

El 9 de septiembre de 2010 14:30, Maia Cordero <maiacordero en gmail.com>escribió:

> Mmmm no se porque usaras una funcion de encriptación :S Yo uso MD5 a mi
> criterio es mas fácil de usar.
>
> Desde PHP hago esto:
>
> md5(trim($_POST['txtClave']))
>
> y en la BD tengo un campo de este tipo:
>
> clave char(32) not null
>
> No contesto tu pregunta pero quizás una solución alternativa no te viene
> mal ;)
>
> El 9 de septiembre de 2010 14:15, Juan Pablo <jbarreto_92 en hotmail.com>escribió:
>
>>  Hola.
>> Les aclaro mi problema:
>>
>> Tengo un sistema de usuarios q encripta la contraseña con la función
>> crypt(string $str  [, string $salt  ] )
>>
>> Acá hice un script de prueba para probar todas las posibilidades.
>>
>> $password = crypt("ASDASDASD10","mardelmusic"); // let the salt be
>> automatically generated
>> $usuario="ASDASDASD100";
>>
>> if (crypt($usuario,"mardelmusic") == $password) {
>>    echo "Password verified!:<br>$password <br>".crypt($usuario,$password);
>> }else{echo"Password falsa:<br>$password <br>".crypt($usuario,$password);}
>>
>>
>> Esto da verdadero. A pesar de que la contraseña q el usuario puso tenga un
>> cero demás. Y cuando imprime las contraseñas, ambas coinciden. O sea q
>> genera la misma contraseña con un 0 más... o varios (tambien probe con
>> muchos y pasa lo mismo)
>>
>> Entonces lo q decidí es sacarle la semilla.
>> En la prueba paso todo bien, pero cuando voy a mi script, falla, aunque
>> las pass coincidan:
>>
>> $pass_db=$data["usuario_pass"];  //De la base de datos, que el usuario
>> cargo cuando se registro. $usuario_pass=$_POST["pass"];
>>
>> f(crypt($usuario_pass,$pass_db) != $pass_db){
>>     ERROR!
>> }else{
>>     BIEN!
>> }
>>
>> Lo más comico de todo, es que en el error pongo imprimir ambas contraseñas
>> (base de datos y la encriptada del post) y son las dos iguales, pero son de
>> la siguiente estructura:
>>
>> $1$eM2.Pk3.$pDsUodej3nwxAkOVVQ0M21
>>
>> Entonces no se si el error lo ocasionan los $ $ o . . no se...
>>
>> Gracias y nos vemos el miercoles!
>>
>>
>> _______________________________________________
>> Php-avanzado mailing list
>> Php-avanzado en pato2.fi.mdp.edu.ar
>> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>>
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://www3.fi.mdp.edu.ar/pipermail/php-avanzado/attachments/20100909/d4b8f4c4/attachment.htm 


Más información sobre la lista de distribución Php-avanzado