Foros del Web » Programando para Internet » PHP »

sistema de login

Estas en el tema de sistema de login en el foro de PHP en Foros del Web. Hola , hice un login (simple) , que por el momento me funciona bien , pero me gustaría mejorarlo Como se podría mejorar? ej: en ...
  #1 (permalink)  
Antiguo 13/05/2012, 16:21
 
Fecha de Ingreso: julio-2011
Mensajes: 38
Antigüedad: 13 años, 4 meses
Puntos: 1
Pregunta sistema de login

Hola , hice un login (simple) , que por el momento me funciona bien , pero me gustaría mejorarlo

Como se podría mejorar?

ej: en aspectos de seguridad , o haciendo que la sesion se cierre si pasa un tiempo inactivo(que nose como se hace) , etc. dejo el codigo:

Este es el form de login
Código PHP:
<?php
$error
=$_GET['error'];

if (
$error==1){
    
    
$estado'error al ingresar'
    }

?>
<div id="cont" align="center" style="font-size:20px">

<form id="form1" name="form1" method="post" action="login.php">
    <table width="256" border="1">
        <tr>
            <td width="93" bgcolor="#0099CC"><h6>Usuario:</h6></td>
            <td width="192" bgcolor="#0099CC">
                            <label for="nombre"></label>
                            <input type="text" name="usuario" id="usuario" />
            </td>
        </tr>
        <tr>
            <td bgcolor="#6699CC"><h6>Clave:</h6></td>
            <td bgcolor="#6699CC"><label for="pass"></label>
                <input type="text" name="pass" id="pass" />
            </td>
        </tr>
        <tr>
        <td colspan="2" align="center" bgcolor="#CC0033"><?php echo $estado?></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><label for="mail"></label>      <input type="submit" name="registrar" id="registrar" value="Entrar" /></td>
        </tr>
  </table>
</form>
</div>

este es el login.php

Código PHP:

include('conectar.php');
$usuario $_POST['usuario'];
$pass $_POST['pass'];
$query     "Select id, usuario From TABLA Where usuario = '$usuario' AND pass = '$pass'";


$result mysqli_query($link$query);
echo 
mysqli_error($link);

$row mysqli_fetch_object($result);
$id$row->id;
$usuario$row->usuario;

$row_cnt mysqli_num_rows($result);
// printf("El resultado tiene %d filas.\n", $row_cnt);


if($row_cnt == 1)
{
    
session_start();
    
    
$_SESSION['UserInfo'] = $row;
    
$_SESSION["usuario"] = $usuario ;
    
    
header('Location: abm.php');
}
else{

  
header('Location: ingreso.php?error=1');

 

        
?> 
Y despues tengo en el conectar.php el que determina si esta logueado

Código PHP:


function isLogged()
{
    
session_start();
    
    if(!isset(
$_SESSION['UserInfo']))
        
header('Location: ingreso.php?noestalogueado');


y por ultimo en las paginas que se necesita estar logueado sito la función

isLogged()

y muestro el usuario que esta activo con $_SESSION['usuario']


Bueno eso , si alguien me puede aportar mejoras , le estaria muy agradecido


saludos
  #2 (permalink)  
Antiguo 13/05/2012, 16:39
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 16 años, 5 meses
Puntos: 127
Respuesta: sistema de login

para el limite de tiempo

http://www.forosdelweb.com/f18/contr...sesion-806927/


usa addcslashes() en las consultas para evitar inyecion de codigo sql

Código PHP:
$usuario =addcslashes($_POST['usuario']);
$pass addcslashes($_POST['pass']);
$query     "Select id, usuario From TABLA Where usuario = '$usuario' AND pass = '$pass'"
espero que te sirva de algo.
  #3 (permalink)  
Antiguo 13/05/2012, 19:26
 
Fecha de Ingreso: julio-2011
Mensajes: 38
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: sistema de login

Gracias !! , ya use los dos aportes!!.

en el addcslashes use los siguientes

Código PHP:
Ver original
  1. addcslashes($_POST['usuario'],"\\';-")

me falta alguno importante??

Algún otro consejo que me aporten ???

gracias !!
  #4 (permalink)  
Antiguo 14/05/2012, 06:57
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: sistema de login

Pues por ejemplo pasar la variable $pass por md5() o sha1() antes de enviarla a consulta.

Código PHP:
$usuario $_POST['usuario'];
//para esto deberías tener la pass
//guardada de la misma forma en la base de datos.
$pass md5($_POST['pass']);

$query "SELECT id, usuario ";
$query.= "FROM TABLA ";
$query.= "WHERE usuario = '$usuario' ";
$query.= "AND pass = '$pass'"
Otra cosa es que deberías validar que llega a la consulta. Por ejemplo, si el usuario esperas que sea solo letras sin espacios (soyusuario), no debería traer "soy_usuario"

Con un simple if( preg_match(..., ...) ) no dejas entrar la variable en la consulta. Evitando hacer consultas a la DB que son inválidas por si mismas.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #5 (permalink)  
Antiguo 14/05/2012, 14:48
 
Fecha de Ingreso: julio-2011
Mensajes: 38
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: sistema de login

Cita:
Iniciado por Uncontroled_Duck Ver Mensaje
Pues por ejemplo pasar la variable $pass por [URL="http://php.net/manual/es/function.md5.php"]md5()[/URL] o [URL="http://php.net/manual/es/function.sha1.php"]sha1()[/URL] antes de enviarla a consulta.

Código PHP:
$usuario $_POST['usuario'];
//para esto deberías tener la pass
//guardada de la misma forma en la base de datos.
$pass md5($_POST['pass']);

$query "SELECT id, usuario ";
$query.= "FROM TABLA ";
$query.= "WHERE usuario = '$usuario' ";
$query.= "AND pass = '$pass'"
Otra cosa es que deberías validar que llega a la consulta. Por ejemplo, si el usuario esperas que sea solo letras sin espacios (soyusuario), no debería traer "soy_usuario"

Con un simple [URL="http://www.php.net/manual/es/function.preg-match.php"]if( preg_match(..., ...) )[/URL] no dejas entrar la variable en la consulta. Evitando hacer consultas a la DB que son inválidas por si mismas.

Hola , Gracias!! lo de md5 lo voy a usar , ya lo tenia visto , pero ya había creado unos usuarios sin eso.

los otros dos temas no entiendo muy bien como hacerlo.

lo de (soyusuario), no debería traer "soy_usuario" , no entiendo como validarlo con el preg_match() , este no se usa para buscar una cierta palabra en una cadena ??

estoy perdido en este tema.
  #6 (permalink)  
Antiguo 20/05/2012, 02:13
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: sistema de login

Cita:
Iniciado por juanmanuelk Ver Mensaje
[...]
los otros dos temas no entiendo muy bien como hacerlo.

lo de (soyusuario), no debería traer "soy_usuario" , no entiendo como validarlo con el preg_match() , este no se usa para buscar una cierta palabra en una cadena ??
[...]
Con las expresiones regulares.

Aquí tienes un aporte de pateketrueke
http://www.forosdelweb.com/f18/aport...10/index2.html

preg_match devuelve un resultado bolean, 1 o 0 si hay coincidencias o no.

El ejemplo práctico que puse anteriormente:
Código PHP:
if( preg_match('/^[a-z]+$/''soyusuario') ){} // = true

if( preg_match('/^[a-z]+$/''soy_usuario') ){} // = false 
El patrón lo adaptas a lo que quieres admitir de cada variable que recibes.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #7 (permalink)  
Antiguo 20/05/2012, 02:35
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 7 meses
Puntos: 97
Respuesta: sistema de login

..nada importante, pero queda mas limpio

Código PHP:
$error=$_GET['error'];

if (
$error==1){
    
    
$estado'error al ingresar'
    } 
Código PHP:
$estado=$_GET['error']==1?'error al ingresar';''

Etiquetas: login, seguridad, session, usuarios
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 09:25.