Autenticación de usuarios y Sesiones en PHP

download Autenticación de usuarios y Sesiones en PHP

of 11

Transcript of Autenticación de usuarios y Sesiones en PHP

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    1/11

    Guia 5 pag.1

    Facultad: Ingeniera

    Escuela: ComputacinAsignatura: PERL/PHP

    Tema:

    Autenticacin de usuarios y Sesiones en PHP

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    2/11

    Guia 5 pag.2

    I. Objetivos

    Identificar las formas en que se pueden desarrollar aplicaciones web requiriendo autenticacin deusuarios

    Aplicar funciones de sesin para crear pginas protegidas

    Crear variables de sesin para almacenar datos y preferencias de los usuarios

    II. Introduccin Teorica

    Qu es la autenticacin?

    Autenticacin o autentificacin es un proceso que permite verificar la identidad digital del remitente deuna comunicacin digital.

    El ejemplo ms comn, en donde se aplica autenticacin es cuando un usuario intenta conectarse a unservidor, que puede ser de pginas web, de datos de un sistema de gestin de bases de datos, de correoelectrnico, etc. La idea es asegurarse que el usuario que intenta conectarse compruebe su identidadconfirmando que es quien dice ser

    En una aplicacin web se puede implementar la autenticacin de usuarios de tres formas diferentes:

    1. Utilizando autenticacin con htaccess de Apache2. Utilizando autenticacin http con PHP3. Manejando sesiones

    1. Utilizando autenticacin con htaccess de Apache

    La forma menos elegante de proteger archivos y carpetas del servidor en una aplicacin web es crear unarchivo, denominado htaccess.

    Este proceso requiere que se modifique una de las opciones en el servidor web Apache en el archivohttpd.conf.

    Como primer paso debe abrirse el archivo httpd.conf y modificar las opciones que se muestran en la lneaAllowOverride All o AllowOverride None y cambiarla por AllowOverride AuthConfig. Guarde el cambioy cierre el archivo.

    2. Utilizando autentificacin HTTP con PHP

    La autenticacin bsica con PHP se base en el uso de variables de entorno cuyos valores se obtienen delservidor web.

    Para acceder a estos datos se utiliza la matriz asociativa $_SERVER. Esta forma de autenticacin requiereque PHP est instalado como mdulo Apache o como mdulo ISAPI en Internet Information Server (IIS).

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    3/11

    Guia 5 pag.3

    Las variables de entorno que deben verificarse como establecidas son:$_SERVER['SERVER_SOFTWARE'], $_SERVER['PHP_AUTH_USER'] y$_SERVER['PHP_AUTH_PW']

    Existen muchas estrategias para autenticar usuarios desde un script PHP. Existe la posibilidad de hacer laautenticacin directamente en el cdigo con usuarios y contraseas estticas o utilizando un archivo decontraseas alojado en el servidor. Sin embargo, la forma ms segura es utilizando usuarios y contraseasalmacenados en una base de datos. Este mtodo exige que se aplique la autenticacin a cada pgina a laque el usuario tenga acceso para garantizar que est accediendo el mismo usuario.

    A continuacin se presenta un archivo en donde se realiza comprobacin usando las variables de entorno

    antes descritas, y donde la clave y usuario se encuentran en el mismo script.

    III. Desarrollo

    Ejemplo 1autenticacionbasica.php (validacion local con HTTP)

    if($_SERVER['PHP_AUTH_USER'] != 'user' || $_SERVER['PHP_AUTH_PW'] != '123456'){//Si el visitante no ha introducido sus datos o si los//datos proporcionados no son correctos redirigirlo a//la ventana de autenticacin bsica HTTPheader('WWW-Authenticate: Basic realm="Realm-Name"');

    if(substr($_SERVER['SERVER_SOFTWARE'],0,9) == 'Microsoft'){header('Status: 401 Unauthorized');

    }else{

    header('HTTP/1.0 401 Unauthorized');}$msgden = "";$msgden .= "No tienes acceso a este sitio";echo $msgden;

    }else{

    //Si estamos ac es porque el usuario introdujo los datos correctos$msgauth = "";

    $msgauth .= "Tus datos son correctos. Tienes acceso a este sitio";echo $msgauth;

    }

    Ejemplo 2secret. php (formulario de ingreso de usuario y validacin local)

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    4/11

    Guia 5 pag.4

    Ingrese sus datos para ingresarEsta es una pgina protegida

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    5/11

    Guia 5 pag.5

    Contrasea:

    Ejemplo 3-bcomprobarusuario.php (validacin con uso de archivos de usuarios parte 2)

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    6/11

    Guia 5 pag.6

    echo "Bienvenido, $user!";}?>

    SESIONES

    La necesidad de las sesiones surge de la naturaleza del protocolo HTTP, que es un protocolo sin estado, loque significa que no dispone de un mtodo incorporado para conservar el estado entre dos transacciones.

    Esto es lo que provoca que cuando un usuario solicita una pgina y luego otra, no exista manera de que elservidor entienda que ambas solicitudes provienen de un mismo usuario, de modo que todas las variablesde un script son reestablecidas siempre despus de una solicitud.

    Definicin de Sesiones

    De forma simple, se puede definir una sesin como el tiempo que un usuario permanece conectado a unsitio web. De forma ms tcnica y relacionada con programacin del lado del servidor, una sesin es unbloque de informacin que almacena todo tipo de variables y valores relacionados con los usuario y susvisitas a un sitio web en particular. El control de la sesin consiste en poder realizar un siguimiento delusuario mientras se mantenga navegando por el sitio web, permitiendo mostrar contenido de las pginasen funcin de su nivel de autorizacin o de sus preferencias personales

    Implementar Sesiones

    Los pasos bsicos para el seguimiento de una sesin son:1. Iniciar la sesin2. Comenzar a registrar las variables de sesin necesarias3. Utilizar las variables de sesin en todos los scripts que lo requieran4. Anular las variables registradas5. Eliminar la sesin

    Iniciar una Sesion en PHP

    Existen dos formas de iniciar sesiones en PHP:

    La primera es utilizando la funcin session_start( ), con la cual se puede crear un identificador de sesinnuevo, o retomar un id de sesin creado previamente. Se requiere que utilice la llamada a esta funcin alinicio de todas las secuencias de comando que vayan a utilizar sesiones.

    La segunda forma, consiste en configurar el archivo php.ini para que inicie sesiones de formaautomtica cuando alguien visite el sitio. Para ello se debe asignar el valor de uno a la variable deconfiguracin session.auto_start, cuyo valor por defecto es cero. Este mtodo tiene el inconveniente queno permite utilizar objetos como variables de sesin.

    Registrar una variable de sesion

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    7/11

    Guia 5 pag.7

    Utilice la matriz superglobal $_SESSION para crear una variable de sesin.

    Una variable de sesin se crea cuando se coloca como ndice de la matriz superglobal $_SESSION elnombre de alguna variable, pero sin el smbolo de dlar. Esto es similar a como se crean variables pasadaspor la URL con la matriz superglobar $_GET o campos de formulario con el mtodo POST utilizando lamatriz superglobal $_POST

    Un ejemplo de registro de una variable de sesin es el siguiente:

    $_SESSION['estado'] = 1;$_SESSION['page'] = $pagina;

    $_SESSION['nameusr']=$row['nombre'] . " " .$row['apellido'];$_SESSION['perfil'] = $row->perfil;$_SESSION['photo'] = $preferencias['img'];

    Es preciso para poder acceder a los valores almacenados en variables de sesin iniciar el script con unallamada a la funcin session_start( ). Si se utiliza un objeto como variable de sesin, es preciso incluir ladefinicin de la clase antes de invocar a la funcin session_start( ) para volver a cargar las variables desesin. De esta forma PHP sabe cmo reconstruir el objeto de sesin.

    Debe prestar atencin a verificar si las variables de sesin estn registradas o no. Puede utilizar para ellolas funciones isset( ) o empty( ). Por ejemplo: isset($_SESSION['name']);

    Si ya no se va a utilizar una variable de sesin es aconsejable anular su registro. Esto ayudar a liberarrecursos del servidor. Para anular el registro de una variable de sesin puede utilizar la funcin unset.

    Ejemplounset($_SESSION['page']);

    NOTA IMPORTANTE: El uso de las funciones session_unregister() y session_unset() ya no es necesarioni recomendable. Para anular el registro de todas las variables utilice:$_SESSION = array();

    III. Desarrollo

    Paso 1. Crear la pgina de inicio de sesin o tambin conocida como pgina de autenticacin de usuarios.

    En esta pgina el usuario introduce su usuario y contrasea para ingresar al sistema. El cdigo de estapgina se muestra a continuacin:

    login.php

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    8/11

    Guia 5 pag.8

    Autenticacin PHPFormulario de autenticacinDatos incorrectosIntroduce tu nombre de usuario y contrasea

    Nombre de usuario:

    Contrasea:

    Para ingresar, debs ingresar usuario en el 1er campo y 123 en el 2do.

    Lo que debe notar en el cdigo anterior es el if que verifica si se ha enviado a travs de la URL la variableerrorusuario con un valor de si. Si es as se muestra el mensaje Datos incorrectos antes del formulario, si

    no slo se piden los datos de autenticacin.

    Paso 2. Validar los datos enviados desde el formulario

    El formulario anterior enva los datos a la pgina autenticacin.php la cual se encarga de validar los datosenviados desde el formulario. Si los datos son correctos, se crea la variable de sesin autenticado. Si noson correctos redirige al usuario hacia la pgina de login.php agregando en la URL la variable errorusuariocon el valor si. Veamos el cdigo anterior:

    autenticacion.php

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    9/11

    Guia 5 pag.9

    Paso 3. Crear un mdulo de seguridad para proteger las pginas del sitio

    Debe crear una pgina que se insertar en todas las pginas web de su sitio que desea proteger o restringirmediante sesiones. El cdigo podra ser como el siguiente:

    seguridad.php

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    10/11

    Guia 5 pag.10

    Paso 4. Agregar el mdulo de seguridad a las pginas que van a tener acceso restringido.

    Lo nico que debe hacer es agregar el cdigo del archivo seguridad.php en las primeras lneas de losscripts de las pginas que desea proteger. Puede utilizar la funcin include o require. Veamos el cdigo delscript aplicacion.php de nuestro ejemplo:

    aplicacion.php

    Aplicacin segura

    Ahora ests en una aplicacin segura

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Utenim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute iruredolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat nonproident, sunt in culpa qui officia deserunt mollit anim id est laborum.


    Salir del sistema

    Paso 5. Crear el script para terminar la sesin y salir del sistema

    Bsicamente, lo que debe hacerse al salir del sistema es eliminar la sesin y redirigir al usuario a la pginade login.php. Veamos el cdigo:

    salir.php

    Contenido no seguro

    Ahora ests fuera de la aplicacin segura.

    Autenticar usuario

  • 8/14/2019 Autenticacin de usuarios y Sesiones en PHP

    11/11

    Guia 5 pag.11

    IV. INVESTIGACION COMPLEMENTARIA

    1. Respecto a la tarea de la guia 5 (la tarea que se evalu para el segundo periodo), realizar las modificacionesnecesarias para que sea una aplicacin segura, deber de hacer un formulario de identificacin de usuarios, ya seausando sesiones o http, adems todas las pagina debern de contener seguridad, no podrn ser accedidas porusuarios sin autorizacin.

    V. Fuentes de consulta

    Libro: Proyectos Profesionales PHP. Autor: Ashish Wilfred.

    Libro: PHP5 a travs de ejemplos. Autor: Abraham Gutirrez y Gines Bravo editorial Alfaomega

    Sitio WEB: www.php.net/manual/es

    Sitio WEB: http://www.sqlite.org/ Sitio Oficial de SQLite (en ingls)

    Sitio WEB:http://www.sqlitemanager.org/ Web oficial de la aplicacin SQLiteManager