Foros del Web » Programando para Internet » PHP »

Es seguro este login?

Estas en el tema de Es seguro este login? en el foro de PHP en Foros del Web. Hola, cree un sistema de login para los usuarios de mi web y queria saber si es seguro. Es decir si una persona sin tener ...
  #1 (permalink)  
Antiguo 08/08/2007, 17:45
 
Fecha de Ingreso: febrero-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 63
Antigüedad: 17 años, 2 meses
Puntos: 3
Es seguro este login?

Hola, cree un sistema de login para los usuarios de mi web y queria saber si es seguro. Es decir si una persona sin tener la contraseña pueda acceder al panel de control de un usuario.

Estos son los archivos:

Archivo login.php
Código HTML:
<form action="procesa_login.php" method="POST">

<p>Usuario:<input type="Text" name="usuario" size="12" maxlength="50"></p>

<p>Contrase&ntilde;a:
<input type="password" name="contrasenia" size="12" maxlength="50"></p>

<input type="Submit" value="Log in">

</form> 

Archivo procesa_login.php

Código PHP:
<?

$nombre_usuario 
$_POST["usuario"];

mysql_connect ("localhost""adm""pass");

mysql_select_db("db");

$result mysql_query("SELECT password FROM usuarios WHERE usuario='$nombre_usuario'");

$row mysql_fetch_array($result);

if(
$row["password"] == $_POST["contrasenia"]){

setcookie('nombre_usuario',$nombre_usuario);

header ("Location: ./panel_usuario.php");

}else{

header("Location: login.php"); 

}

mysql_free_result($result);

?>

Archivo panel_usuario.php

Código PHP:
<?

$nombre_usuario 
$_COOKIE["nombre_usuario"];

?>


<p><?php echo "Bienvenido <b>$nombre_usuario</b>"?></p>

... RESTO DEL ARCHIVO
Gracias
  #2 (permalink)  
Antiguo 08/08/2007, 19:08
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Es seguro este login?

Cuidado con la inyección SQL: nunca pases directamente la entrada del usuario a la consulta.
Como mínimo, usá la función addslashes() con el campo nombre.

Un ataque posible pero un tanto más avanzado es modificar el nombre de usuario, al guardarse en una cookie que estará en el cliente, te pueden pasar cualquier valor.

Siempre es más seguro usar sesiones, que además no dependen de las cookies.


Saludos.
  #3 (permalink)  
Antiguo 08/08/2007, 19:17
 
Fecha de Ingreso: febrero-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 63
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Es seguro este login?

Hola alvlin, gracias, fijate que te parece este código:

Archivo procesa_login.php

Código PHP:
<?

$nombre_usuario 
addslashes($_POST["usuario"]);

mysql_connect ("localhost""adm""pass");

mysql_select_db("db");

$result mysql_query("SELECT password FROM usuarios WHERE usuario='$nombre_usuario'");

$row mysql_fetch_array($result);

if (
$_POST["contrasenia"] == ""){ //Si se salteo el archivo login.php y entró directamente a 
// procesa_login.php; puse esto poque sino al ir a procesa_login.php (sin antes haber pasado por login.php), lo redireccionaba a menu_usuario.php 
//(como si la contraseña fuese correcta), entonces con esto logro que al entrar 
//a procesa_login.php (sin antes haber pasado por login.php) me redirecciona a la pagina index.php

header("Location: index.php"); 

}else if(
$row["password"] == $_POST["contrasenia"]){ //Si la contraseña coincide con la que esta en la //base de datos

header ("Location: ./menu_usuario.php");

session_start();
$_SESSION["usuario"] = $nombre_usuario;
session_register("autentificado");
$autentificado "SI"

}else{ 
// Si la contraseña no coincide con la que esta en la base de datos

header("Location: index.php"); 

}

mysql_free_result($result);

?>
Archivo mensuario.php
Código PHP:
<? include("seguridad.php"); ?>

<?

$nombre_usuario 
$_SESSION["usuario"];

?>


<p><?php echo "Bienvenido <b>$nombre_usuario</b>"?></p>

Archivo seguridad.php

Código PHP:
<?
//Inicio la sesión
session_start();

//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($_SESSION["autentificado"] != "SI") {
    
//si no existe, envio a la página de autentificacion
    
header("Location: index.php");
    
//ademas salgo de este script
    
exit();
}
?>

Última edición por HTTP 404; 08/08/2007 a las 21:27
  #4 (permalink)  
Antiguo 09/08/2007, 05:59
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Es seguro este login?

Parece bastante mejor

Pero no uses las funciones session_register y similares, usá la matriz $_SESSION:

cambiá
session_register("autentificado");
$autentificado = "SI";

por

$_SESSION['autentificado'] = "SI"

(http://www.php.net/session)

Y para mayor seguridad, antes de hacer una redirección, usá session_write_close() para asegurarte de que la sesión se guarda antes de que se cambie a otra página (siempre se hace, pero a veces por X motivo puede demorar, y la página siguiente no verá todos los cambios en la sesión.)


Saludos.
  #5 (permalink)  
Antiguo 09/08/2007, 16:36
 
Fecha de Ingreso: febrero-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 63
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Es seguro este login?

Muchas gracias alvlin. Ya hice las modificaciones que me dijiste y yo hice otras modificaciones, y queria saber si estaba bien.

Archivo procesa_login.php

Código PHP:
<?

$nombre_usuario 
addslashes($_POST["usuario"]);

//Conexion con la base
mysql_connect ("localhost""adm""pass");

//selección de la base de datos con la que vamos a trabajar 
mysql_select_db("db");

$result mysql_query("SELECT password FROM usuarios WHERE usuario='$nombre_usuario'");

$row mysql_fetch_array($result);

if (
$_POST["contrasenia"] == "" || $nombre_usuario == "" ){ // ***** ESTO LO MODIFIQUE ****

header("Location: index.php"); 

}else if(
$row["password"] == $_POST["contrasenia"]){

// **** LO QUE ESTA DENTRO DE ESTE IF LO MODIQUE: PUSE session_write_close() QUE ME DIJISTE Y ELIMINE session_register("autentificado"); $autentificado = "SI"; 


session_start();
$_SESSION["usuario"] = $nombre_usuario;
session_write_close();
header ("Location: ./menu_usuario.php");

}else{

header("Location: index.php"); 

}

mysql_free_result($result);

?>
Archivo seguridad.php

Código PHP:
<?
//Inicio la sesión
session_start();

//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($_SESSION["usuario"] == "") { // ***** ESTO LO MODIFIQUE ****
    //si no existe, envio a la página de autentificacion
    
header("Location:index.php");
    
//ademas salgo de este script
    
exit();
}
?>

Al archivo mensuario.php no le hice ninguna modificación.

Muchas gracias de nuevo.
  #6 (permalink)  
Antiguo 09/08/2007, 19:15
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Es seguro este login?

Parece todo correcto, no tengo más sugerencias que hacerte


Saludos y suerte
  #7 (permalink)  
Antiguo 12/08/2007, 22:09
Avatar de Apolo
Colaborador
 
Fecha de Ingreso: abril-2003
Ubicación: ubicado
Mensajes: 7.961
Antigüedad: 21 años
Puntos: 109
Tema movido desde el foro Web general hacia el foro PHP.

Saludos,
__________________
Planes VPS en el mundo > DirectorioVPS
Visita los foros de hosting de ComunidadHosting
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:25.