jueves, 20 de octubre de 2011

Php Seguridad, el login

Bien lo prometido es deuda, en este post, hablare del famoso sistema de login en php.

Muchos desarrollos requerirán de un sistema de sesiones donde tenga que haber un logeo para acceder a información privilegiada, con las vulnerabilidades vistas antes y ya resueltas, podemos hacer nuestro sistema de login con confianza, bien lo primero es propiamente la pagina de login.

en esta deberás separar por un lado el html y por el otro el script php que hara la validacion de modo que te quedaría algo parecido a esto:

login.html

 <form action="valida.php" method="post">
     <input type="text" name="usuario"/>
     <input type="password" name="pass"/>
     <input type="submit" name="ok" value="Acceder"/>
 </form>


evidentemente lo anterior podría fortalecerse con un fingerprinting que ya también se vio en el post anterior y con ello asegurar que los datos que nos llegan son de nuestro formulario legitimo y por el otro lado el script valida.php

include_once("path/config.php"); //el config que creamos en el post anterior en caso de no                                      //haber podido configurar el php.ini

$con=mysql_connect("localhost","uno que NO sea root","un buen password");

// realizamos la conexión primero que nada ya que la función siguiente requiere de una        //conexión y luego recibimos los datos por post>

$us=mysql_real_escape_string(strip_tags($_POST['usuario']));
$pass=mysql_real_escape_string(strip_tags($_POST['pass']));

/*realizamos la correspondiente comparación de usuario y contraseña en la base de datos
...
  ya que realizamos la comparación y sabemos que si es el usuario correcto entonces         procedemos a inicializar el manejador de sesiones, regeneramos el id de sesion y creamos una variable para verificar que se inicio sesión */

if(usuario_validado){>
     session_start();
     session_regenerate_id(true);
     $_SESSION['iniciosesion']=true;
     Header("Location: usuarios.php");
}else{
       Header("Location: login.php");
}


En el código anterior la función mysql_real_escape_string requiere de una conexion que ya establecimos y previene sql injection ademas strip_tags previene php o html injection, posteriormente de haber realizado la correcta validación, en todas las paginas donde usaremos sesiones o son de acceso solo a usuarios validados, debemos hacer lo siguiente al incio:

include_once("path/config.php"); //el config que creamos en el post anterior en caso de no                                      //haber podido configurar el php.ini
session_start();
session_regenerate_id(true);
if($_SESSION['iniciosesion']!=true){
     $_SESSION=array();
     session_unset();
     session_destroy();
     $parametros_cookies = session_get_cookie_params();
     setcookie(session_name(),0,1,$parametros_cookies["path"]);
     Header("Location: no_inicio_sesion.php");
}


Con lo anterior nos aseguramos de que el usuario haya iniciado sesión y en caso de que no entonces destruye la que creo y lo manda de nuevo al login.

Bueno espero que les haya sido de utilidad, ya con esto terminamos la serie de post dedicados a la seguridad php, la próxima veremos como optimizar el código.

Saludos.

1 comentario:

  1. Felicidades el mejor explicado de todos los relacionados que he visto en la web, seria bueno que actualizaras este post incluyendo un Hash como Sha512 y una salt, con ello creo que te quedaria perfecto el aporte.

    ResponderEliminar