Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Oshrik en 27 Diciembre 2012, 21:36 pm



Título: Login PHP contra un fichero txt
Publicado por: Oshrik en 27 Diciembre 2012, 21:36 pm
Hola a todos/as,
ante todo daros las gracias.
He estado probando un aporte que lipman corrigio en Febrero, de hecho es el mismo,y probandolo tal cual solo me sale la pantalla en blanco al darle al botón enviar. Estuve imprimiendo por pantalla el valor de la variables en cada traza del código y el valor es el mismo que el que hay en el fichero. Pero toqueteando aqui y allá solo consegui que me pusiera false, a pesar, de que los print daban el valor del txt.
Volví a partir de 0, 4 veces, llegando al mismo resultado. Y no se que está mal. Os colgare todos los ficheros que he creado.
Como no me funcionó ese código no he ido más allá.
He probado de ponerle el: $_POST[]; al declarar la variable, pero el resultado es el mismo.
Seguro que hay algo que estoy haciendo mal, pero yo, no lo veo.
Si necesitais más datos como por ejemplo, donde lo estoy ejecutando, SO, etc. No duden en solicitarlo.

Fichero: inicio.html

Código:
<html>
<head>
<title>Mi sitio</title>
</head>
<body>
<form method="POST" action="login.php">
<label for="Usuario">Usuario: </label>
<input type="text" name="Usuario" id="Usuario"/><br />
<label for="password">Contraseña: </label>
<input type="password" name="password" id="password" /><br />
<input type="submit" value="Entrar" />
</form>
</body>
</html>

Fichero: usuarios.txt
      admin|tkm2000$

Fichero: login.php
Código:
<html>
<head>
<title></title>
</head>
<body>
<?
$user = "Usuario";
    $pass = "password";
     
     
    $f=fopen("usuarios.txt","r");
     
    while(!feof($f)){
     
    $linea = fgets($f);
     
    //Pregunto si la linea empieza por el nombre de usuario dado, y si le sigue la barra vertical
    if(preg_match("/(^".$user."\|)/",$linea))
    //En caso de ser correcto, compruebo que empiece por el nombre de usuario, contenga la barra, y acabe en la contraseña.
    if(preg_match("/(^".$user.")\|(".$pass."$)/",$linea))
    echo "ENTRO";
    else
    echo "FALSO";
    else
    echo "FALSO";
    }
     
    fclose($f);
?>
</body>
</html>

Esto es todo. Espero a ver usado los tags correctos. Es la primera vez que posteo en un foro...


Título: Re: Login PHP contra un fichero txt
Publicado por: #!drvy en 27 Diciembre 2012, 21:51 pm
Buenas,

Para empezar, las variables $usuario y $password deben estar declaradas de forma que obtengan el contenido que se envia mediante el inicio.html. De la forma de la que las tienes declaradas ahora, obtienen usuario = Usuario y password = password. Vamos que es un string.


Código
  1. <?php
  2.  
  3. $user = $_POST['Usuario'];
  4. $pass = $_POST['password'];
  5.  
  6. $f=fopen("usuarios.txt","r");
  7.  
  8. while(!feof($f)){
  9.  
  10.    $linea = fgets($f);
  11.    echo $linea."\n";
  12.    // Pregunto si la linea empieza por el nombre de usuario dado, y si le sigue la barra vertical
  13.    if(preg_match("/(^".$user."\|)/",$linea)){
  14.        // En caso de ser correcto, compruebo que empiece por el nombre de usuario,
  15.        // contenga la barra, y acabe en la contraseña.
  16.        echo $linea."\n";
  17.        if(preg_match("/(^".$user.")\|(".$pass.")/im", $linea,$result)){
  18.            echo "ENTRO";
  19.        } else { echo "password FALSO"."\n";  }
  20.    } else { echo "usuario FALSO"; }
  21.  
  22. }
  23.  
  24.    fclose($f);
  25. ?>

El codigo PHP te quedaría de la siguiente forma. Lo he modificado un poco porque realmente odio que no se pongan las llaves ( { } ) en los if's. Te puede confundir totalmente.

PD: Ten en cuenta que el usuario seria admin y la contraseña tkm2000.
PD2: Eso es realmente inseguro. Te recomiendo que al menos las guardes en un fichero .php inaccesible por los visitantes.

Saludos


Título: Re: Login PHP contra un fichero txt
Publicado por: Oshrik en 27 Diciembre 2012, 22:21 pm
Muchas gracias, drvy!!
Voy a ver si funciona.



Título: Re: Login PHP contra un fichero txt
Publicado por: Oshrik en 28 Diciembre 2012, 18:47 pm
No funcionó al principio. Total, que fui indagando. Cambie los tags del php <? ?> por <?php ?> y walaaa, funcionó. No se a que es debido, pero imagino que debe ser por la versión de php.
Muchas gracias a todos!!