comparte el articulo 

Seguridad en el registro de usuarios y el manejo de sesiones con PHP (segunda parte)

Actualizado el 13/09/2013 < > 5 Cometarios

Resumen: Seguimos con el anterior artículo, más recomendaciones para mejorar la seguridad en el registro de usuarios y el manejo de sesiones PHP.

Completamos la primera parte del tutorial sobre la seguridad en el registro de usuarios y el manejo de sesiones en PHP.

Cuando un usuario inicia sesión, la información incluida en ésta se guarda en variables globales a las cuales se puede acceder con el prefijo $_SESSION, dentro de los If de nuestro código utilizamos la función empty de PHP con el operador “!” al inicio indicando lo que se podría interpretar de la siguiente manera “si la variable de sesión inicio y la variable de sesión usuario no están vacías prosigue mostrando el mensaje con su nombre y email”.

La primera parte quedaría de la siguiente manera:

if(!empty($_SESSION['inicio']) && !empty($_SESSION['usuario'])) 
 { 
     // Mostrará el mensaje con su nombre
¿>
<h1>Mensaje</h1>
<p>Hola <?=$_SESSION[‘usuario’] ; ?> ¿Cómo estás?</p>
<?

En el segundo IF, estamos realizando básicamente lo mismo solo que con las variables que nos llegan con el método POST del formulario, en el caso de que estas sean las que no están vacías debemos iniciar el proceso para crear la sesión.

elseif(!empty($_POST['usuario']) && !empty($_POST['password'])) 
 { 
$usuario = mysql_real_escape_string($_POST['usuario']); 
$password = md5(mysql_real_escape_string($_POST['password'])); 
  
$verifica = mysql_query("SELECT * FROM usuarios WHERE usuario = '".$usuario."' AND password = '".$password."'"); 
  
     if(@mysql_num_rows($verifica) == 1) 
     { 
         $row = @mysql_fetch_array($verifica); 
         $email = $row['email']; 
  
         $_SESSION['usuario'] = $usuario; 
         $_SESSION['email'] = $email; 
         $_SESSION['inicio'] = 1;  
  
      echo "<meta http-equiv='refresh' content='=1;index.php' />"; 
     }
     else
     {
                echo “Error, usuario y/o contraseña incorrectos”;
     }
 }

Lo que hacemos en esta parte es agregarle los valores enviados mediante POST a las variables $usuario y $password, en el caso de ésta última utilizamos la función md5 para encriptar la contraseña, por su parte mysql_real_escape_string es para asegurarnos de que la cadena que estamos enviando a mysql esté completamente correcta.

Después realizamos una consulta a la tabla usuarios de nuestra base de datos con los valores dados en el formulario. Dicha consulta la guardamos en la variable $verifica para saber cuántas filas nos devuelve mediante el uso de la función mysql_num_rows, en caso de que la consulta arroje un resultado positivo el valor será igual a 1, pero si no encontró ningún usuario y contraseña que coincidieran con los dados regresará el valor de 0 y se imprime un mensaje de error en la página para indicarle al usuario la falla.

Al ser el número de filas de $verifica igual a 1 guardamos los valores dentro de las variables de sesión las cuales perdurarán mientras esta exista,  en el caso de la variable $row le asignamos mediante la función mysql_fetch_array los valores que arroja la consulta y esto lo utilizamos para asignar a la variable $email el valor arrojado del campo email de la base de datos, finalmente mediante el uso de una etiqueta meta re-direccionamos la página para que se actualice y entre a la sección de miembros.

La última parte de index.php sería el “else” en el cual entrarán las peticiones que no cumplieron con ninguna de las otras dos condiciones, dentro de este “else” se incluirá el siguiente formulario:

<?
else 
 { 
 ?> 
    <h1>Login</h1>    
     <form method="post" action="index.php" name="login" id="login"> 
     <fieldset> 
         <label for="username">Usuario:</label><input type="text" name="usuario" id="usuario" /><br /> 
         <label for="password">Password:</label><input type="password" name="password" id="password" /><br /> 
         <input type="submit" name="ingresar" id="ingresar" value="Ingresar" /> 
     </fieldset> 
     </form> 
  
<p>Si deseas registrarte da click <a href=”registro.php”>AQUI</a></p>
 <?php 
 }
?>

Logout de la sesión

Debemos incluir un link para que el usuario pueda cerrar sesión, este link llevará a una página a la cual podemos llamar logout.php o cerrar.php y que contendrá un código parecido al siguiente:

 <?php
include "bd.php; 
 $_SESSION = array();
 session_destroy();
?>
 <meta http-equiv="refresh" content="0;index.php">

En el cual se destruye la sesión que se había iniciado y con ello todos los valores de las variables globales de sesión se borran, finalmente con una etiqueta meta se re-direcciona a la página index.php donde se nos mostrará el mensaje de bienvenida.

La página de registro de usuario

La página de registro ya dependerá de cada quien, en nuestro ejemplo la incluimos suponiendo que es una página de seguridad media, es decir que cualquiera pueda solicitar ingresar pero necesita un usuario y contraseña para ello, si tu no deseas que todo el mundo pueda mandar una solicitud de ingreso simplemente ignora este último paso.

Para crear la página de registro creamos un nuevo archivo llamado registro.php donde incluiremos un formulario para que el usuario pueda ingresar sus datos y al mandarlos se guarden en la base de datos o sean mandados a un servidor de correos para que sean aprobados o no por un administrador, para mandar una respuesta al usuario se puede pedir la dirección de correo en el formulario.

Hay que recordar que estamos manejando encriptación MD5 para las contraseñas por lo que al momento de mandar insertar un nuevo registro el query debe lucir parecido a esto:

INSERT INTO usuarios (usuario, password, email) VALUES('".$usuario."', '".md5($password)."', '".$email."')

Para que al momento de guardarse en la tabla quede de manera que no pueda leerse a simple vista y que algún intruso no pueda robarse la información de alguna manera sencilla.

Para terminar…

La seguridad es un aspecto siempre relevante en el desarrollo de cualquier aplicación, existen personas que se especializan en ello y que ofrecen un servicio de consultoría y/o de desarrollo de sistemas y algoritmos especialmente enfocados a la seguridad de nuestros sitios y servidores, muchos de nosotros conocemos o hemos oído de este aspecto de manera general, por qué no aprovechar esto y empezar a aplicar buenas prácticas de seguridad en nuestro sitio, la primera de ellas puede ser implementar este sistema de sesiones que por lo menos mantendrá un poco más ocupados a aquellas personas que sólo quieran realizar algún daño, proteger nuestra información es tarea de nosotros, las herramientas o instrumentos con los que lo realizaremos ya depende del presupuesto, tiempo o disposición de cada quien.

Publicado el 28/07/2010, última actualización 13/09/2013.

Licencia: Contenido exclusivo de LaWebera.es. Prohibida su copia.

Autor: ISC Daniel Ernesto Navarro Herrera

URL: LaWebera.es :: Diseño Paginas Web

Añadir Comentario (Subir al texto)

5 Cometarios

  1. Juan Carlos

    Todo se ve y suena excelente para nosotros los principiantes en PHP con MySQL, pero en mi caso particular me he perdido en los nombres de los documentos php y html. Así mismo, no feo funcionando el sitio :-( cosa que me desespera para poder comprender totalmente lo que no scompartes y así poder hacer mi tarea. Sería excelente poder contar con un ZIP con los codigos fuente de los diferentes archivos (“completos”).
    Muchas gracias por tu tiempo y ayuda.

    Lunes, 4 de octubre 2010

  2. juanillo

    excelente, ya habia hecho algo pero me habia quedado bastante desordenado xD, con esto me quedara muy sencillo :D

    Lunes, 14 de febrero 2011

  3. mhctoledo

    No entiendo muy bien para que incluyes el fichero de BBDD en la parte de logout de la sesión.

    Jueves, 31 de marzo 2011

  4. Luis

    Revisa tu codigo esta mal sobretodo el primer codigo de esta segunda parte del tutorial
    por eso creo que no hay ningun comentario que diga que le salio.. :S

    Lunes, 10 de septiembre 2012

  5. Santiago Rios

    Excelente las dos partes del tutorial.

    Seria bueno que incluyas uno para el usario que inicio sesion pueda almenos consultar la base de datos.

    Lunes, 7 de octubre 2013

(Subir al texto)

Añadir Comentario

* Campos obligatorios

Meneame Bitacoras