Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/08/2013, 17:49
ocp001a
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: problema con autentificacion de usuario

Veo algunos problemas de concepto y también de malas prácticas.



Código PHP:
Ver original
  1. <?php
  2. include('config.php');
  3. if(!isset($_POST['user']) && empty($_POST['pass'])){
  4. sion_destroy();
  5. header("Location: index.php");
  6. }else{
  7. $user= $_POST['user'];//no filtras la variable para que no te inyecten instrucciones maliciosas
  8. $pass= md5($_POST['pass']);
  9. }
  10. $query="SELECT user FROM users WHERE user='$user'";//Aqui metes la consulta en una variable, pero luego la colocas directa
  11. $rs= mysql_query($query,$cn);
  12. $numrow= mysql_num_rows($rs);
  13. if($numrow != 0){
  14. $qp= mysql_query("SELECT user,pass FROM users WHERE user='$user'",$cn);//haces una segunda consulta
  15. $numpass= mysql_num_rows($qp);
  16. if($numpass != 0){
  17. $row= mysql_fetch_array($qp);
  18. if(!$row['pass'] == $pass){// es más simple usar != que negar el ==
  19. echo "La contraseña ingresada es incorrecta, vuelve a iniciar sesion, ";
  20. echo "<a href='index.php'>aqui</a>";
  21. }else{
  22. //echo "Bienvenido admin: ".$row['user'];
  23. $_SESSION['s_user']=$row['user'];
  24. header("location: index.php");
  25. }
  26. }else{
  27.     echo "no se encuentra el usuario ingresado\n";//No es conveniente indicar que el usuario no existe de cara a un posible ataque.
  28.     echo "por favor verifique los datos e ingrese nuevamente, <a href='index.php'>Inicio</a>";
  29. }
  30. }
  31. ?>


Una forma un poco simple sería así:
Código PHP:
Ver original
  1. if(!mysql_num_rows($qp= mysql_query("SELECT user,pass FROM users WHERE user='$user'",$cn)))//vemos si la consulta regresa un dato
  2.      die('Usuario o password incorrecto');//si no existe el usuario. Puedes mandar un mensaje, hacer una redirección o ambos
  3.  
  4. $pasbd=mysql_fetch_assoc($qp);//extraemos el password almacenado
  5. if($pass!=$pasbd)//si no coinciden los passwords
  6.      die('Usuario o password incorrecto');//Ponemos el mensaje
  7.  
  8. //si se encontró el usuario y si el password fue correcto
  9. echo "Bienvenido";