Foros del Web » Programando para Internet » PHP »

Mi sistema de Login con cookie (aporte para checar errores)

Estas en el tema de Mi sistema de Login con cookie (aporte para checar errores) en el foro de PHP en Foros del Web. Hola soy nuevo en esto del php, pero no en programar, solo que ya tenia años de no hacerlo, c++ y visual basic. Navegando por ...
  #1 (permalink)  
Antiguo 21/05/2013, 21:33
Avatar de bowiecamaleon  
Fecha de Ingreso: mayo-2013
Ubicación: Mexico
Mensajes: 15
Antigüedad: 10 años, 11 meses
Puntos: 1
Mi sistema de Login con cookie (aporte para checar errores)

Hola soy nuevo en esto del php, pero no en programar, solo que ya tenia años de no hacerlo, c++ y visual basic.

Navegando por la red, recolectando codigos fuentes hice mi propia version, con conexion a mysql y con cookies para recordar.

Solo tengo algunas dudas

Código PHP:
<?php 
include("includes/conexion.php"); // Se incluye conexion a la base de datos
include("includes/Evitar-inyeccion.php"); // Se incluye funcion para evitar inyecciones
include("includes/fechas.php");// Funcion Fecha
session_start();// Se inicia el session_star para crear las sesiones

//Array con los posibles mensajes que se presentaran.
$mensajes = array(  
        
0=>"Ingresa tus datos"
        
1=>"Falto ingresar nombre"
        
2=>"Falto ingresar contraseña"
        
3=>"Nombre de usuario no valido",
        
4=>"Contraseña no valida"
        
5=>"Bienvenido",);




//Declaracion de variables
$msg="";
$tiempodate("Y-m-d H:i:s");




// Se comprueba si ya se establecio la variable "MM_insert"
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "Envio")) 
{
        
//Si faltan ingresar los dos campos.
        
if (($_POST["user"]=="") AND ($_POST["pass"]=="")) 
        {
            
$msg=$mensajes['0'];
        }
        
//Si falto ingresar el nombre.
        
if (($_POST["user"]=="") AND ($_POST["pass"]!="")) 
        {
            
$msg=$mensajes['1'];
        }
        
//Si falto ingresar la contraseña.
        
if (($_POST["user"]!="") AND ($_POST["pass"]=="")) 
        {
            
$msg=$mensajes['2'];
        }
        
//Si se ingresaron los dos .
        
if (($_POST["user"]!="") AND ($_POST["pass"]!="")) 
        {
            
$user       $_POST['user'];
            
$user_clear strtolower(GetSQLValueString($_POST['user'], "text"));
             
$pass_clear GetSQLValueString(md5($_POST['pass']), "text");
            
$user_end   trim(str_replace("'"""$user_clear));
            
$pass_end   trim(str_replace("'"""$pass_clear));
            
            
            
$consultasprintf("SELECT * FROM usuarios WHERE usuario = %s",$user_clear);
            
$resultadomysql_query($consulta,$conexion) or die (mysql_error());
            
$fila=mysql_fetch_array($resultado);
            
            

                    if (!
$fila[0]) //Si el usuario NO existe. 
                    
{
                    
$msg=$mensajes['3'];
                    }
                    else 
//Usuario logueado correctamente (Falta verificar contraseña)
                    
{                                
                                if(
$fila['5']!=$pass_end && $fila['3']==$user_end)//SI la contraseña no es valide
                                
{
                                        
$msg=$mensajes['4'];    
                                }
                                
                                if(
$fila['5']==$pass_end && $fila['3']==$user_end)//Si la contraseña y usuarios son validos
                                
{
                                        
$msg=$mensajes['5'];
                                         if(isset(
$_POST['checkbox'])==1
                                        {
                                                echo 
"Recuerdame"."</br>";
                                        } else {
                                                echo 
"Olvidame"."</br>";
                                        }

                                        
//Insertamos la hora de registro para informacion
                                        
$last sprintf("UPDATE usuarios SET last_date = '$tiempo' WHERE usuario =%s",$user_clear);
                                        
$inserta mysql_query($last,$conexion) or die (mysql_error());
                                        
                                        
//Definimos las variables de sesión                                        
                                          // Se comienzan a asignar los valores para el array
                                        
$ID=$fila['ID'];
                                        
$nombre=$fila['nombre']; 
                                        
$apellidos=$fila['apellidos'];
                                        
$usuario=$fila['usuario'];
                                        
$email=$fila['email'];
                                        
$pass=$fila['pass'];
                                        
$permisos=$fila['permisos'];
                                        
$imagen=$fila['imagen'];
                                        
$fecha_ingreso=$fila['fecha_ingreso'];
                                        
$last_date=$fila['last_date'];
                                        
                                        
//Se crea un array con el valor de la tabla
                                        
$mi_sesion=array(
                                            
'ID' =>$ID,
                                            
'nombre'=> $nombre,
                                            
'apellidos' => $apellidos,
                                            
'usuario'  => $usuario,
                                            
'email' => $email,
                                            
'pass' => $pass,
                                            
'permisos'=> $permisos
                                            
'imagen'  => $imagen,
                                            
'fecha_ingreso'=> $fecha_ingreso,
                                            
'last_date'=> $last_date,);
                                        
                                        
                                        
//Se creara variables de sesion de acuerdo a su nivel de usuario
                                        
switch ($mi_sesion['permisos']) {
                                              case 
'baneado':
                                              
$_SESSION['General'] = 1;
                                              
$_SESSION['mi_sesion']=$mi_sesion;
                                              
//header("Location: panel_general.php");
                                              
break;
                                              case 
'proceso':
                                              
$_SESSION['General'] = 2;
                                              
$_SESSION['mi_sesion']=$mi_sesion;
                                              
//header("Location: panel_general.php");
                                              
break;
                                              case 
'usuario':
                                              
$_SESSION['General'] = 3;
                                              
$_SESSION['mi_sesion']=$mi_sesion;
                                              
//header("Location: panel_general.php");
                                              
break;
                                              case 
'escritor':
                                              
$_SESSION['General'] = 4;
                                              
$_SESSION['mi_sesion']=$mi_sesion;
                                              
//header("Location: panel_general.php");
                                              
break;
                                              case 
'master':
                                              
$_SESSION['General'] = 5;
                                              
$_SESSION['mi_sesion']=$mi_sesion;
                                              
//header("Location: panel_general.php");
                                              
break;
                                              }
                                          
                      
                                        
                                }
//Fin de proceso
                    
                    
                                
                        
                        
                    
}

                
                
                
        }




}
?>
  #2 (permalink)  
Antiguo 21/05/2013, 21:47
 
Fecha de Ingreso: marzo-2013
Ubicación: Neuquén Capital
Mensajes: 111
Antigüedad: 11 años, 1 mes
Puntos: 8
Respuesta: Mi sistema de Login con cookie (aporte para checar errores)

Interesante!
  #3 (permalink)  
Antiguo 21/05/2013, 23:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Mi sistema de Login con cookie (aporte para checar errores)

1- El primer error que veo es que está basado en códigos de algún editor, tal vez Dreamweaver, que no suele ser adecuado en las soluciones generadas.

2- Qué pasa si un usuario quiere usar apóstrofe en su contraseña?... algo como abc'123, si quitas ese caracter no incrementas la seguridad y lograrás que el usuario se vuelva loco cuando quiera ingresar al sitio, a menos que en el registro también lo hayas quitado... pero no es algo correcto, para eso existen funciones y métodos de escape de datos.

3- Estás usando mysql_*, que ya es una librería obsoleta, deberías migrar a mysqli_* o, mejor aún, a PDO

4- No es conveniente ser tan explícito con el usuario al decirle que el nombre ingresado no existe y, por separado, que la contraseña es incorrecta, es mejor "Nombre de usuario y/o contraseña incorrectos."

5- Estás guardando la contraseña sin encriptar?, es preferible encriptarla para evitar desastres.

6- Creas variables como $ID, $nombre, etc., que luego asignas a un array y, finalmente, a una variable de sesión; sería más fácil si usas $_SESSION['mi_sesion'] = $fila; y después analizas los permisos para establecer $_SESSION['General'] = 1;

Para ver algunas sugerencias de cómo solucionar algunos de esos problemas, pásate por: http://www.forosdelweb.com/f18/aport...8/#post4265377

De hecho, es recomendable leer el tema completo, pero no tan necesario.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 09/07/2013, 23:14
Avatar de bowiecamaleon  
Fecha de Ingreso: mayo-2013
Ubicación: Mexico
Mensajes: 15
Antigüedad: 10 años, 11 meses
Puntos: 1
Respuesta: Mi sistema de Login con cookie (aporte para checar errores)

Si de hecho mi rubro no es la programacion, pero me gusta ser autodidacta, y a paginas como esta he aprendido ya pase mi login a mysqli una pregunta ¿Que beneficios tiene? bueno el primero que veo es que pronto seran obsoletos pero mas que nada por las nuevas versiones de php, pero... digo ahora usamos el mp3 y siepre uno dira, los discos de acetato tenian mejor calidad, desconosco las ventajas, ahora ¿Que hay de malo al ser tan especifico?

Mi nueva version que hice uno se puede conectar por el usuario o correo, creo que la consulta me queda clara sin dudas SELECT * FROM tabla WHERE usuario = $_POST['usuario'] OR emal= $_POST['usuario']


Pero en la logica del if no se si estoy bien, hice pruebas y me funciono

If ($_POST['pass']==$fila['pass'] && $_POST['usuario']==$fila['usuario'] OR $_POST['usuario']==$fila['email']){
//Realiza sesion y redirige a pagina
}else{
//usuario no valido
}

Tengo la duda en el OR del if

Y gracias por las observaciones
  #5 (permalink)  
Antiguo 10/07/2013, 00:58
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Mi sistema de Login con cookie (aporte para checar errores)

Cita:
Iniciado por bowiecamaleon
ya pase mi login a mysqli una pregunta ¿Que beneficios tiene? bueno el primero que veo es que pronto seran obsoleto
Tengo entendido que mysqli tiene mejor rendimiento que mysql.

Cita:
Iniciado por bowiecamaleon
¿Que hay de malo al ser tan especifico?
Al decir que el nombre de usuario no existe y, por separado, que la contraseña es incorrecta, es casi como una invitación para intentar un ataque por fuerza bruta.

Luego, debo insistir en que debes aplicar un hash a la contraseña y no almacenarla tal cual la tecleó el usuario; si bien, es difícil que alguien obtenga acceso a tu base de datos, si llega a conseguirlo, tendrá a la vista nombres de usuario y contraseñas para ingresar a tu sitio.

No imagino lo que se podrá hacer si uno o más usuarios tienen la misma contraseña en tu sitio y su cuenta de correo.

Finalmente, para comparaciones donde aplicas dos operadores diferentes es mejor si los agrupas, ejemplo:

if(clave == clave_en_bdd && (usuario == usuario_bdd || usuario = email_bdd))
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 10/07/2013, 17:48
Avatar de bowiecamaleon  
Fecha de Ingreso: mayo-2013
Ubicación: Mexico
Mensajes: 15
Antigüedad: 10 años, 11 meses
Puntos: 1
Respuesta: Mi sistema de Login con cookie (aporte para checar errores)

Si esta en md5, solo que fue todo un rollo, usaba la funcion que venia en dreamweaver, para las inyecciones, y ponia una '' a las variables para hacer sprinf, entonces hice todo un show las mismas variables unas sin comillas otras sin ellas otras con md5, pero ya no tengo ese problema ¿A eso se refiere con encriptar? cual es mejor el md5 o el sha1 estaba leyendo el articulo que me dijo, alguien daba una opcion en el,
  #7 (permalink)  
Antiguo 10/07/2013, 20:35
 
Fecha de Ingreso: marzo-2013
Ubicación: Neuquén Capital
Mensajes: 111
Antigüedad: 11 años, 1 mes
Puntos: 8
Respuesta: Mi sistema de Login con cookie (aporte para checar errores)

Cita:
Iniciado por Triby Ver Mensaje
Finalmente, para comparaciones donde aplicas dos operadores diferentes es mejor si los agrupas, ejemplo:

if(clave == clave_en_bdd && (usuario == usuario_bdd || usuario = email_bdd))
Hubo un error, debería ser "usuario == email_bdd".

Cita:
Iniciado por bowiecamaleon Ver Mensaje
Si esta en md5, solo que fue todo un rollo, usaba la funcion que venia en dreamweaver, para las inyecciones, y ponia una '' a las variables para hacer sprinf, entonces hice todo un show las mismas variables unas sin comillas otras sin ellas otras con md5, pero ya no tengo ese problema ¿A eso se refiere con encriptar? cual es mejor el md5 o el sha1 estaba leyendo el articulo que me dijo, alguien daba una opcion en el,
Te recomiendo NINGUNA de estas! Hay ya muchisimos diccionarios de MD5 por ejemplo. Que los usuario no saben y meten su contraseña para convertirla en MD5, y la pagina guarda y relaciona la pass con el resultado. Entonces, si vos metes el resultado o sea MD5, te va a decir la contraseña!! NADA SEGURO.. Puedes hacer mezcla sha1 y md5 o doble md5, o hay ootras mejores funciones! para asignar al azar un agregado de x caracteres, a la contraseña para hacerla más segura!..

Etiquetas: cookie, login, mysql, registro, select, sistema, sql, tabla, usuarios, variables
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:50.