Regresar a la página www.ComoCrearTuWeb.com
Página 5 de 12 PrimerPrimer 123456789 ... ÚltimoÚltimo
Resultados 61 al 75 de 166

Tema: Registro de usuarios desde cero.

  1. #61
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    Lantiga, muy interesante el enlace que nos mandas, según el cuál deduzco que sería mejor usar la encriptación llamada Blowfish acompañada del SALT en lugar de mi primera propuesta, HASH con SALT, no?

    Esto de la seguridad de aplicaciones es todo un munto aparte, je je je. Da para toda una web! A ver si conseguimos sacar algo en claro que sirva a todos los colegas de CCTW pues por lo que veo, no es fácil encontrar explicaciones bien claras ni aplicaciones terminadas y que funciones teniendo a la vez todos los requisitos y características de mejora que pretendemos alcanzar. Esto promete ser un buen proyecto educativo, verdad?

    Un abrazo!

  2. #62
    Esto empieza a ser un vicio... Habitante Avatar de lantiga
    Fecha de Ingreso
    23 feb, 11
    Mensajes
    905
    Poder de Reputación
    14
    Creo que te estas equivocando Jorge blowfish se utiliza para el tema de analisis de encriptación y creo que no es lo que quieres; como te he puesto antes es mejor utilizar una función crypt() en vez de una función hash pues tienes la ventaja aparte de que te generará el salt automaticamente y que puedes utilizar varias linea de condición para establecer tantos hash`s como veas convenientes.
    Suscribete a Los videotutoriales de Lantiga y podre hacer vídeos más largos y con mejor calidad.

  3. #63
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    ok, investigaré sobre cómo aplicar esa función crypt() y os cuento. Muchas gracias!

  4. #64
    Esto empieza a ser un vicio... Habitante Avatar de lantiga
    Fecha de Ingreso
    23 feb, 11
    Mensajes
    905
    Poder de Reputación
    14
    Una cosa más Jorge estaria bien que simplificaras el codigo para que no te lies y lo tengas claro ; si lo que te interesa es ver si la fase de encriptación funciona; abarca solo eso trozo de codigo y si necesitas comprobación con un echo te basta; una vez tengas claro que eso funciona comentas el echo temparalmente y haces las solicitudes a la base de datos y demas sino te vas a perder tu solo.
    Suscribete a Los videotutoriales de Lantiga y podre hacer vídeos más largos y con mejor calidad.

  5. #65
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    Si si, claro. Eso es lo que hago pues si no, no puedo saber qué parte falla. Concretamente en ese fallo que comenté, coloqué echos para imprimir incluso los valores de ambas variables, las que se comparan para ver si el login es correcto, es decir, la contraseña proporcionada por el usuario que pretende logearse, ya encriptada, y la que se guarda en la tabla y, no coinciden. Es por eso que se que me he debido liar en la forma de encriptar la proporcionada por el usuario al intentar logearse, pero aún no he dado con el error.

    Gracias en cualquier caso por el consejo, vendrá muy bien también al resto saber esas cosas.

    Sigo!

    Fragmento del código con los echos colocados para detectar el fallo:

    [
    QUOTE]$datosdelusuario= mysql_fetch_array($consulta, MYSQL_ASSOC);
    $hash = hash('sha256', $datosdelusuario['salteada'] . hash('sha256', $password) ); //aplicamos el algoritmo a la contraseña dada por el usuario en el login para poder compararla con la que tenemos guardada
    if($hash != $datosdelusuario['password']) //si la contraseña es incorrecta...
    {
    header("Refresh: 13; URL=login.php");
    echo "<br /><p>ERROR. La contraseña no es válida.</p>";
    echo "<br /><p>hash = $hash.</p>";
    echo "<br /><p>datosdelusuario[password] = $datosdelusuario[password].</p>";
    die;
    }[/
    QUOTE]


    Datos obtenidos al intentar logearme, es decir, lo que me muestra la pantalla:

    ERROR. La contraseña no es válida.

    hash = 1cb43b9ceb33ee6c2bbdfc2152df6ba5790608e550fbcb6fb2 bbe20f34b98a99.
    datosdelusuario[password] = 873467642674d52b853341382dfb16570f4c3fb2f10641fcf0 660fa6524aa591.
    Puse un Refresh: 13 para que me diera tiempo a ver el resultado, je je je.

  6. #66
    Esto empieza a ser un vicio... Habitante Avatar de lantiga
    Fecha de Ingreso
    23 feb, 11
    Mensajes
    905
    Poder de Reputación
    14
    Una ultima pregunta Jorge como estas haciendo las pruebas en local o online?
    Suscribete a Los videotutoriales de Lantiga y podre hacer vídeos más largos y con mejor calidad.

  7. #67
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    on line Lantiga. Pero que no sea la última pregunta! je je je

  8. #68
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    Si escribo en gris es porque esos comentarios han quedado fuera de lugar. El problema que comento en esos textos lo he podido arreglar y he corregido los códigos en los mensajes de modo que esos comentarios no tienen ya sentido.

    Dejadme que piense en voz alta.... je je je, rara cosa cuando en lugar de pensar escribo, je je je. Es que me tengo que marchar a grabar unas cosas con mi grupo y no quiero perder el hilo de lo que llevaba entre manos. Lo esribo y así sigo luego mejor.

    El valor que se añade a la tabla cuando un usuario se registra es este:

    (En rojo señalo la contraseña proporcionada por el usuario que pretende logearse. En azul la que está guardada en la tabla.)

    function saltear ()
    {
    $cadena = md5 (uniqid(rand(), true));
    return substr($cadena, 0, 3);
    }
    $salteada = saltear();
    $hasheada = hash('sha256', $salteada . $hasheada);
    mysql_query("INSERT INTO $tabla (nick,password,salteada,email) values ('$nick','$hasheada','$salteada','$email')
    Es decir, el campo password toma ese valor que tiene la variable $hasheada.

    Por otro lado, la contraseña que introduce un usuario al intentar logearse, viene de:

    $password = $_POST['password']; // cazamos el valor de la contraseña del formulario
    //sacamos los valores correspondientes a ese nick de las variables $password (que está hasheada) y $salteada
    $consulta= mysql_query("SELECT password, salteada FROM ".$tabla." WHERE nick='".$nick."' ");
    $datosdelusuario= mysql_fetch_array($consulta, MYSQL_ASSOC);
    $hash = hash('sha256', $datosdelusuario['salteada'] . hash('sha256', $password) );
    if($hash != $datosdelusuario['password']) //si la contraseña es incorrecta...
    {
    header("Refresh: 13; URL=login.php");
    echo "<br /><p>ERROR. La contraseña no es válida.</p>";
    echo "<br /><p>hash = $hash.</p>";
    echo "<br /><p>datosdelusuario[password] = $datosdelusuario[password].</p>";
    die;
    }
    Luego lo sigo analizando.

  9. #69
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    mmm.... antes de irme creo que el fallo está en

    $hasheada = hash('sha256', $salteada . $hasheada);
    Quizás antes debería haber algo así como esto:

    $hasheada= hash('sha256', $password) ;
    Lo pienso luego un poco más.

  10. #70
    Esto empieza a ser un vicio... Habitante Avatar de lantiga
    Fecha de Ingreso
    23 feb, 11
    Mensajes
    905
    Poder de Reputación
    14
    prueba a usar un editor en local con simulador de php algo tipo aptana te ayudara en la depuración del codigo.
    Suscribete a Los videotutoriales de Lantiga y podre hacer vídeos más largos y con mejor calidad.

  11. #71
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    Ok, tomo nota. Nunca he usado editores para escribir códigos, y si que pueden ayudar a detectar cosas raras ahora que lo dices. Lo pruebo en un ratito, gracias.

  12. #72
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    Efectivamente, el fallo era que me faltaba $hasheada= hash('sha256', $password) ; en el archivo registro.php.

    Ahora todo funciona correctamente y de un modo más seguro que al principio. Parece que este nivel de seguridad puede aumentarse aún siguiendo los consejos de los compañeros, aunque por el momento no he sacado en claro cómo implantarlo. Lo dejo pendiente de investigarlo mejor.

  13. #73
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    [TUTORIAL :: SISTEMA DE REGISTRO DE USUARIOS :: PARTE 19]

    Os acordáis que en el formulario de registro de formulario.php habíamos añadido un campo oculto para verificar luego que los datos que llegan al archivo registro.php provenian solo de ese formulario y no de otro lugar? Era la línea:

    Código:
    <input type="hidden" name="testigo" value="valido" />
    Vamos ahora a aplicar lo mismo en el formulario que hay en el archivo login.php, pues lo tenemos desprotegido en ese sentido, oki? Basta con abrir el archivo y colocarle la línea siguiente:

    Código:
    <input type="hidden" name="testigo2" value="valido" />
    Además le añadimos a cada campo un tamaño máximo, para no darle facilidades al que quiera inyectarnos código maligno. Lo hacemos con la etiqueta maxlenght, quedando el archivo así:

    Nombre del archivo: login.php

    Código PHP:
    <?php

    include_once('configuracion.php');

    if(!isset(
    $_SESSION[usuario]) )  // Esto es, si no está ya logeado
    // Si aún no está logeado le mostramos el formulario de login
    {
    // Formulario para recoger los datos de login y enviarlos a chequeo.php, donde miramos que sean correctos
    echo '
    <form action="chequeo.php" method="POST">
      Nick:     <input type="text"     name="nick"     maxlength="25" size="25" /><br />
      Password: <input type="password" name="password" maxlength="40" size="40" /><br />
                <input type="hidden"   name="testigo2" value="valido" />
                <input type="submit"   name="submit"   value="Login" />
    </form>
        '
    ;
    // le damos la opcion de registrarse si no lo está
    echo '<br /><a href="formulario.php">Registro</a>'
    }
    else   
    // Esto es, si está ya logeado
    {
    // Si está logeado indicamos que no es necesario logearse de nuevo. Le mostramos el nick y la opción de deslogearse
    echo 'Bienvenido a la web <b>'.$_SESSION[usuario].'</b>'// Mensaje de bienvenida
    echo '<br /><a href=logout.php>Salir</a>'//link para deslogearse, iría a logout.php
    }

    ?>
    La variable testigo2 irá a para entonces al archivo chequeo.php con el valor valido. Ahora modificamos el archivo chequeo.php para que aborte el login en el caso de que esa variable no tenga ese valor. Quedaría así ese archivo:

    Nombre del archivo: chequeo.php

    Código PHP:
    <?php

    include_once('configuracion.php');

    if ( (
    $_POST['testigo2']) != "valido")
    {
       
    header("Refresh: 4; URL=registro.php");
       echo 
    "<br /><p>ERROR.</p>";
       die;
    }

    // Chequeamos que el usuario existe y que la contraseña es correcta
    $nick$_POST['nick']; // cazamos el valor de nick del formulario
    $password $_POST['password']; // cazamos el valor de la contraseña del formulario
    //sacamos los valores  de las variables $password (que está hasheada) y $salteada correspondientes a ese nick
    $consultamysql_query("SELECT * FROM ".$tabla." WHERE nick='".$nick."' ");
    if(
    mysql_num_rows($consulta) < 1//si no existe el usuario...
    {
       
    header("Refresh: 4; URL=login.php");
       echo 
    "<p>ERROR. El nick dado no existe.</p>";
       die;
    }
    $datosdelusuariomysql_fetch_array($consultaMYSQL_ASSOC);
    //aplicamos el algoritmo a la contraseña dada por el usuario en el login para poder
    //compararla con la que tenemos guardada
    $hash hash('sha256'$datosdelusuario['salteada'] . hash('sha256'$password) );
    // coinciden?
    if($hash != $datosdelusuario['password']) //si la contraseña es incorrecta...
    {
       
    header("Refresh: 4; URL=login.php");
       echo 
    "<br /><p>ERROR. La contraseña no es válida.</p>";
       die;
    }
    // login correcto, continuamos... 

    session_register("usuario"); //registramos la variable usuario que contendrá el nick del user
    session_register("idusuario"); //registramos la variable idusuario que contendrá la id del user
    $_SESSION[usuario] = $datosdelusuario["nick"]; //damos el nick a la variable usuario
    $_SESSION[idusuario] = $datosdelusuario["id"]; //damos la id del user a la variable idusuario
    header("Refresh: 4; URL=login.php");
    echo 
    '<br /><p>Logeado compañero'.$_SESSION[usuario]".'.</p>';

    ;
    ?>

  14. #74
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,188
    Poder de Reputación
    10
    Hey, una consulta... pensando en esto de las contraseñas y en los métodos de fuerza bruta y tal... no aumentaría esponencialmente la seguridad de una aplicación si hago que el usuario deba registrar dos contraseñas y a la vez, le obligo a poner esas dos contraseñas al logearse? si, se que sería un tostón para el usuario pero, no sería prácticamente 99.9% eficaz? Ambas con métodos de encriptación, claro.

  15. #75
    Esto empieza a ser un vicio... Habitante Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,329
    Poder de Reputación
    17
    De verdad, sería la primera vez que en un registro haya que poner dos contraseñas jajaja

Temas Similares

  1. Empezando desde cero
    Por May en el foro Foro General
    Respuestas: 3
    Último Mensaje: 28/08/2011, 17:17
  2. Iniciando desde Cero
    Por Are$ en el foro Foro General
    Respuestas: 7
    Último Mensaje: 06/01/2011, 06:45
  3. Crear un foro desde cero
    Por Abel_Melero en el foro Foros
    Respuestas: 1
    Último Mensaje: 16/12/2009, 23:01

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •