Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/07/2011, 08:51
gonzaloaedo
 
Fecha de Ingreso: marzo-2011
Mensajes: 31
Antigüedad: 13 años, 8 meses
Puntos: 1
Problema: cambio de password en php con seguridad hash

Estoy trabajando en un sistema de registro y logueo de usuarios con seguridad “HASH” que funciona bien y sin problemas gracias a la ayuda de muchos en este foro.

Bueno ahora se me ocurrió agregar un formulario para cambiar el pasword de usuario y encontré por ahí un formulario que esta arto manoseado y que no funciona muy bien y me gustaría que me ayudaran a entender y a resolver por favor.

Aquí el formulario completo

este es para registrar el usuario funciona bien :)
registrar.php
Código PHP:
<?php
 
// verificamos si se han enviado ya las variables necesarias.
if (isset($_POST['username']) && isset($_POST['password'])) {

    
$username    $_POST['username'];
    
$password    $_POST['password'];
    
$password2   $_POST['password2'];
    
$nombre      $_POST['nombre'];
    
$apellido    $_POST['apellido'];
    
$email       $_POST['email'];
    
    
$cadena '478@€shdk%%';
    
$passsha1($password); // Encriptas la contraseña
    
    // Hay campos en blanco
    
if($username == NULL || $password == NULL || $password2 == NULL || $nombre == NULL || $apellido == NULL || $email == NULL) {
        
        echo 
'Un campo está vacio.';
        
mostrar();
    
    } else {
        
        
// ¿Coinciden las contraseñas?
        
if($password != $password2) {
            
            echo 
'Las contraseñas no coinciden';
            
mostrar();
        
        } else {
            
            
// Comprobamos si el nombre de usuario o la cuenta de correo ya existían
            
$checkuser mysql_query("SELECT usuario FROM usuarios WHERE usuario='$username'");
            
$username_exist mysql_num_rows($checkuser);
            
$checkemail mysql_query("SELECT email FROM usuarios WHERE email='$email'");
            
$email_exist mysql_num_rows($checkemail);
            
            if (
$email_exist || $username_exist 0) {
                
                echo 
'El nombre de usuario o la cuenta de correo estan ya en uso';
                
mostrar();
                
            } else {
                
                
$query 'INSERT INTO usuarios (usuario, password, nombre, apellido, email, fecha)
                VALUES (\''
.$username.'\',\''.$pass.'\',\''.$nombre.'\',\''.$apellido.'\',\''.$email.'\',\''.date("d-m-Y").'\')';
                
mysql_query($query) or die ('Ha fallado la entrada de datos'); // Si falla nos avisa.
                
echo 'El usuario '.$username.' ha sido registrado de manera satisfactoria.<br />';
                echo 
'Ahora puede entrar ingresando su usuario y su password <br />';
                
mostrar1();
                
?>
                
                <?php
            
}
        }
    }
    
} else {
    
    
mostrar();

}

?>

este me dice si estoy logueado correctamente o si no existe el usuario en la BD y toda esa pajamama
validar_usuario.php (funciona bien)
Código PHP:
         <?php
session_start
();
?>
         <?php
    mysql_connect
('xxxxxxxx','xxxxxxxx','xxxxxxxx');
    
mysql_select_db("xxxxxxxx");

    
$usuario strtolower($_POST["usuario"]);
    
$password $_POST["password"];
    if(
$usuario!= "" && $password!= "")
{
    
    
$sql mysql_query('SELECT password, usuario FROM usuarios WHERE usuario="'.$usuario.'"');
    if(
$fmysql_fetch_array($sql)){
    
$passwordDB $f['password'];
    if(
sha1($password) == $passwordDB) {
        
    
        
            
$_SESSION["k_username"] = $f['usuario'];
            echo 
'Has sido logueado correctamente '.$_SESSION['k_username'].' <p>';
            echo 
'<a href="xxxxxxxx.php">Entrar a Manuales</a></p>';
        
        }else{
            echo 
'Contraseña incorrecta';
            echo 
'<a href="../index.php">Inicio</a></p>';
        }
    }else{
        echo 
'Usuario no existente en la base de datos ';
        echo 
'<a href="../index.php">Inicio</a></p>';
    }
    
}

?>

...:::AHORA AKI EL FORMULARIO PARA CAMBIAR PASSWORD:::...

...:::Este es el que me da problemas:::...

cambiar_clave.html
Código HTML:
 <td width="241" height="132"></p>
         <form action="cambiar_clave2.php" method="post">
         <table width="334">
           <tr>
             <td width="155">Usuario: </td>
             <td width="120"><input type="text" name="usuario" size="20" maxlength="20" /></td>
             <td width="37">&nbsp;</td>
           </tr>
             <tr>
               <td>Clave actual:</td>
               <td><input type="password" name="pass" size="20" maxlength="50" /></td>
               <td>&nbsp;</td>
             </tr>
             <tr>
               <td>Nueva clave:</td>
               <td><input type="password" name="nueva" size="20" maxlength="50" /></td>
               <td>&nbsp;</td>
             </tr>
             <tr>
               <td>Confirmar nueva clave:</td>
               <td><input type="password" name="nueva2" size="20" maxlength="50" /></td>
               <td>&nbsp;</td>
             </tr>
             <tr>
               <td height="26"><input type="submit" class="boton" value="Modificar clave" name="modificar" /></td>
               <td><input type="reset" class="boton" value="Borrar campos" /></td>
               <td><a href="../index.php">Inicio</a></td>
             </tr>
           </table>
  </form></td>
 </tr> 
...:::Este es el que me da problemas:::...
cambiar_clave2.php
Código PHP:
         <?php
session_start
();
?>
                 <?php
    mysql_connect
('xxxxxxxx','xxxxxxxx','xxxxxxxx');
    
mysql_select_db("xxxxxxxx");
         
     
$sesion  =  $_SESSION['s_username'];
     
     if (isset(
$_POST['modificar'])) {
     
$usuario $_POST['usuario'];  
     
$a       $_POST['pass'];
     
$b1      $_POST['nueva'];
     
$b2      $_POST['nueva2'];

     if(
$usuario==NULL|$a==NULL|$b1==NULL|$b2==NULL) {
     echo 
"Un campo está vacio. Vuelva a intentarlo <a href=cambiar_clave.php>clic aquí</a>";
     
    }else{

     
$con mysql_query("SELECT * FROM usuarios WHERE username='$sesion'"); 
     if (
mysql_num_rows($con) > 0) {
     
$mostrar mysql_fetch_assoc($con);
     
     
$actual $mostrar['password'];
     
     if(
$actual!=$a) {
     echo 
"\"Clave actual\" debe ser la clave que usas actualmente para iniciar sesion. Si no conoces esa clave, aconsejo ir a           \"olvide mi clave\". <a href=cambiar_clave.php>Volver a intentarlo</a>";
    }else{

     if(
$b1!=$b2) {
     echo 
"Las contraseñas no coinciden. <a href=cambiar_clave.php>Volver a intentarlo</a>";
    }else{
    
     
$sql "UPDATE usuarios set password='$b1' WHERE username = '$sesion'";
     
$res mysql_query($sql) or die("Error: ".mysql_error());
     echo 
"Tu clave ha sido modificada correctamente. Esta es tu nueva clave: <b>".$b1."</b>.<br>Tu cuenta se cerró y tendras           que volver a abrirla. <a href=index.php>Volver a la pagina princial</a>";

     
$_SESSION = array();

}
}
}
}
     }else{
      echo 
'Tu no estas autentificado. No puedes entrar aqui!!<br><br><a href="index.php">Volver</a>';

?>

agradecere mucho sus comentarios