Funcionamiento del sistema de autentificación en PHP

19 de diciembre de 2002
Valoración del artículo:
Descripción de las distintas páginas que forman el sistema de autentificación y su funcionamiento, basado en usuario y contraseña.
Un sistema de autentificación es un módulo de seguridad para asegurarnos de que el usuario que visita las páginas es quien dice ser. Por supuesto, sabiendo que ese usuario es conocido, podremos darle acceso a más aspectos de la página que si fuese un usuario desconocido. Pero supongo que, si estás leyendo este artículo, ya conocerás lo que es un sistema de autentificación y lo que deseas hacer es crear uno para tus páginas.

Referencia: Este manual requiere el conocimiento básico de PHP que, en caso de no tenerlo, se puede aprender en nuestro Manual de Programación en PHP.

Esquema de un sistema de autentificación

Vamos a empezar por definir un diagrama para realizar la autentificación de usuario en unas páginas web, que nos servirá para programar luego las páginas ajustándose al diagrama.

diagrama de funcionamiento de un sistema de autentificacion

En la imagen anterior podemos ver el diagrama, que empieza por la página donde se pide un usuario y contraseña para acceder a la aplicación de acceso restringido.

Los datos de autentificación (usuario y contraseña escritos en la página inicial) se envían a la página dibujada con línea de puntos, que se encarga de hacer una comprobación de dichos datos del usuario. Según los datos de autentificación, se redirecciona al navegador a la página de la aplicación restringida, en caso de que sean correctos, o a la página donde volver a escribir el usuario/contraseña, en caso de que sean incorrectos. Esta página la he dibujado con línea de puntos porque no es una página donde se pare el navegador para nada, sino que sólo es una página de paso que redirecciona a un sitio u otro dependiendo de los datos que reciba.

La aplicación de acceso restringido, aparte de mostrar las funcionalidades que queríamos proteger con usuario contraseña, debe de realizar unas comprobaciones de seguridad para saber si se ha pasado con éxito el proceso de autentificación o si se está intentando acceder de manera no permitida a esa página. Esta comprobación la he dibujado como una capa con color verde más oscuro sobre la página de la aplicación. Si no se satisface dicha comprobación (el usuario no se ha autentificado correctamente) se vuelve a la página donde escribir el usuario y la contraseña.

Este es el esquema básico, que espero que se entienda bien. Ahora, veamos algunas preguntas que podría hacerse el lector.

¿Por qué hacemos esta comprobación de seguridad dentro de la aplicación?
Podría ser que alguien conociese la URL de la aplicación de acceso restringido y la escribiese directamente sobre la barra de direcciones del explorador, así que hacemos esta comprobación para saber que realmente no se está accediendo sin pasar por la página que comprueba si el usuario/contraseña es correcto

¿Cómo sabemos que ciertamente se ha pasado por la página que comprueba los datos de autentificación?
Esta comprobación la podríamos hacer de varias maneras, así pues, depende de nuestro script de autentificación y el nivel de seguridad que tratemos de implementar. Un ejemplo simple podría ser crear una variable de sesión en la página que comprueba los datos, si es que eran correctos, y en capa se seguridad de las páginas de acceso restringido comprobaríamos si esa sesión está o no definida.

En caso de desear burlar la seguridad, ¿Cómo podría un usuario entrar a la página de la aplicación si no hay enlaces directos y para pasar a ella necesitamos que nos redireccione la página de comprobación del usuario/contraseña?
Pues de diversas maneras, para empezar, el historial de los ordenadores guarda las URL a las que se ha accedido y cualquier persona podría recuperar la URL de nuestra aplicación con acceso restringido. También se podría probar distintas URL que podríamos imaginarnos como posibles para la aplicación y esperar a acertar con el nombre de archivo en algún momento, incluso esta tarea se la podríamos encomendar a un programa para realizar muchas más pruebas. En cualquier caso, nuestra seguridad no se puede quedar en simplemente que los posibles intrusos no conozcan la dirección de la página.

Comentarios
Fueron enviados 29 comentarios al artículo
20 comentarios no revisados
9 comentarios revisados:
Por: borja
08/9/2003
Adicionalmente siempre es conveniente que las zonas seguras se accedan a través de un servidor de conexion seguro.

Los detalles son complejos pero lo normal es que el servidor te redireccione a una versión segura (con el https) para que ningún ordenador entre medias pueda escuchar la contraseña con algún programa que mire las conexiones.

Tu comàñero de oficina o cibercafé puede tener un sistema instalado que grabe todos los datos de la red local. Si la contraseña se manda sin encriptar sólo tiene que gardarla ... y ya está.
Por: macias
18/9/2003
Existe ya una pequeña aplicación basada en php con la que la puedes implementar en tu web rapidamente para el uso de zonas restringidas. Esta es la página para poder bajarlo: http://www.hotscripts.com/Detailed/15291.html

Este desarrollo es español por lo que saber manejarlo os va a resultar facil. Yo lo he utilizado en una página mia y funciona perfectamente.
Por: Alexander Cervantes
26/11/2003
he probado este método de autentifiación de este interesante artículo, y, tengo el siguiente sin sabor, cuando uno ingresa con los datos correctos, la APLICACION SEGURA, no es tan segura puesto que si luego abrimos otras páginas o retrocedemos, y luego queremos regresar a la página regresa sin ningún control de autentificación; hay formas con javascript de evitar esto, pero hay alguna otra forma en php?
Por: José Ramón Damas
29/12/2004
Este post es para responder el post de Alex Cervantes.
Quizás ya no te sea necesario, pero ...

Para corregir ese tipo de acceso "no seguro" cuando alguien abre otra pag o retrocede con el botón del navegador, tan sólo debemos destruir la variable de sesión al comienzo de la pag index.php y lo mismo tras incluir la capa de seguridad en la pag aplicacion.php.
Creo que con ésto corregimos ese detalle, desde PHP sin necesidad de Javascript.
Espero que le sea útil a alguien.
Un saludo.
Por: Jose Manuel
26/2/2005
Hola,
Soy un programador todavia nobel, que le gustaría saber donde me podría bajar el código de estas paginas que se prueban.

Gracias un saludo

RESPUESTA

Para tener mas ejemplos y entender mejor esto de la programación en PHP puedes descargarte el manual de PHP y los talleres de PHP donde vienen bastantes ejemplos.

manual PHP

enrique...
Ayuda a validar usuario y contraseña
08/4/2009
Hola a todos, vengo por aca porque necesito ayuda con eso de la validacion de usuario y contraseña. Po lo que vi como funciona este ejemplo me di cuenta que es exactamente lo que necesito, que me funcione como esta ahi. ¿Sera que por favor me pueden decir como es ese codigo para lograr hacer lo que muestra ese ejemplo? por favor es que soy nuevo en esto de desarrollo web.

Gracias.

drigu
Validación Usuario
17/5/2010
Tengo un servidor apache con una base de datos SQL.

Cuando intento identificarme en la página obtengo el siguiente resultado:

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in C:wampwwwlaseroad.php on line 39

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:wampwwwlaseroad.php on line 40

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:wampwwwlaseroad.php on line 68

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:wampwwwlaseroad.php on line 70

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:wampwwwlaseroad.php on line 81

Warning: Cannot modify header information - headers already sent by (output started at C:wampwwwlaseroad.php:39) in C:wampwwwlaserautenticacion.php on line 30

El código al que se refieren los errores es el siguiente:

<?php
/**
* Clase OAD
*
* Contiene los métodos que acceden a base de datos
*/
class OAD
{
/**
* Atributos de la clase DAO
*
* contienes los valores necesarios para la conexión a la fuente de información
* usuario, contraseña, host y base de datos que contiene la información
*
* @acces: private
*/
var $user;
var $pass;
var $host;
var $bd;

/* Constructor */
function __construct()
{
$this->user = 'root';
$this->pass = 'laser';
$this->host = 'localhost';
$this->bd = 'laser';
}

/**
* Funcion para conectar a la base de datos
*
* @return $db: manejador de la base de datos
*/
function ConectaBD()
{
// Conexión a la base de datos
$con = mysql_connect($this->host, $this->user, $this->pass);
mysql_select_db($this->bd, $con);
return $con;
}
...
En principio parece un error de acceso al servidor apache, pero las contraseñas y nombres de usuario coinciden.
Un saludo.

Sergios...
Necesito tu ayuda Miguel
23/9/2011
Hola Miguel, Soy de San Juan, ARG. Necesitaria de tu ayuda soy novato en esto, te comento mas o menos como seria lo que busco:

*Necesito crear un Login y un Password para un nuevo proyecto que estamos haciendo que se trata de la busqueda de personas. ese usuario y contraseña tendria que tener privilegios de entrar a la web y que vea una sola parte de ella en este caso el: "Sistema de Busqueda de personas", Una vez logueado X persona que solo tenga accesso a la Carga de datos y foto de algun menor desaparecido, que tenga un panelcito de control y le de la opcion de carga de imagen o modificacion de info de la persona desaparecida. Suponiendo que el cargador quiera ingresar una nueva persona para su busqueda "Siempre hablando de busqueda de personas" y luego que salga en la plantilla de fotografias+info del desaparecido. que le pida el DNI del desaparecido para comprobar que no haiga duplicado de personas es decir que la BD compruebe eso. si no es mucho pedirte me decis tu mail enviamelo por msj privado y te comento bien. por favor es de urgencia es para los niños desaparecidos.

Lofthem
Como bloquear la pagina, despues de 3 intentos fallidos de inicio de session, sin base de datos conectada.
29/2/2012
Pues quisiera saber como implementar que con ingresar 3 veces mal los datos del usuario, ya no deje intentar iniciar la sesión, y pues en este link esta la carpeta con los archivos que uso, todo funciona bien, pero solo quisiera agregar ese detalle.
No pongo aqui los codigos, porque creo que sera menos entendible, o almenos eso creo yo.
PD: Para todos los que vean esta pregunta en un futuro, descarguen el archivo y chequenlo, y asi sabran como implementar la respuesta que espero me puedan dar!!! Saque los codigos de este mismo manual, oviamente, pero a mi modo, o bueno un poquito...

De antemano Gracias.

http://www.mediafire.com/?5qwudy3303o6btm

Manuales relacionados
Categorias relacionadas
El autor
Miguel Angel Alvarez
Director de DesarrolloWeb.com
http://www.desarrolloweb.com


Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...