Curso de PHP y MySQL
José Gómez Castaño
 

Autenticación

En muchas ocasiones es necesario llevar a cabo de identificación de usuarios. Esta identificación se basa en un par Usuario y Clave proporcionado desde el navegador cliente y evaluado en el servidor.

Utilizando las Variables Predefinidas PHP_AUTH_USER, PHP_AUTH_PW, es posible obtener los valores del usuario y contraseña que alguien haya proporcionado. Para solicitar la identificación al usuario utilizaremos se debe enviar una petición desde el servidor al cliente utilizando la función header. En ella, enviaremos como argumento la petición HTTP 1.1 estándar para que aparezca una gina en el cliente. El atributo "realm" permite indicar el dominio o nombre del servicio donde se esté ejecutándose.

<?php
    header('WWW-Authenticate: Basic realm="SERVIDOR"');
    header('HTTP/1.0 401 Unauthorized');
?>

El método utilizado es el Basic. Esto tiene el inconveniente de que tanto el usuario como la clave, en claro (sin cifrado), hasta el servidor. Otro astecto a tener en cuenta es que este método sólo está presente en las versiones de PHP sobre Apache compilado como módulo, no en las que se esté ejecutando como CGI, o como filtro ISAPI en IIS.

Este es un ejemplo integrando la petición de autenticación y su comprobación:

<?php
  if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="SERVIDOR"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'No se autenticado';
    exit;
  } else {
    echo "Bienvenido ".$_SERVER['PHP_AUTH_USER']." ";
    echo "Su clave es ".$_SERVER['PHP_AUTH_PW'];
  }
?>
 

En otras ocasiones es necesario identificar al usuario por atributos de la cabecera, principalmente la dirección IP del equipo que accede al servicio. Para ello podemos leer la información almacenada en las variables REMOTE_ADDR y HTTP_X_FORWARDED_FOR del array asociativo $_SERVER. La primera almacena la dirección IP del equipo cliente que accede al servidor y la segunda la del proxy, si el equipo se encuentra en una red local y su acceso atraviesa y proxy.

<?php
if($_SERVER[HTTP_X_FORWARDED_FOR]){ 
	echo "La Ip de tu proxy es:".$_SERVER[REMOTE_ADDR]."
"; echo "Tu IP es:".$_SERVER[HTTP_X_FORWARDED_FOR]; }else{ echo "Tu IP es:".$_SERVER[REMOTE_ADDR]; } ?>

En todos los procesos en los que se obtengan valores de un formulario, y en los de autenticación en particular, hay que tener en cuenta que la variable magic_quotes del fichero php.ini, debe estar en on.

En la autenticación de usuarios hay que tener en cuenta que la identificación debe ir cifrada hasta el servidor. Esto se puede conseguir configurando una conexión HTTPS mediante la instalación de un certificado en el servidor que habilite conexiones seguras SSL. Otra forma es cifrando la contraseña del usuario en el formulario del navegador mediante una función MD5 o SHA1. Este hash se envía al servidor y se compara con el objetido de la función md5() o sha1() de PHP aplicadas a la contraseña ya almacenada. Realmente se debería almacenar ya cifrada. Para ayudar a esto en estos enlaces se puede descargar las funciones en un JavaScript

SHA1.js

MD5.js

Creative Commons License
Curso PHP y MySQL by José Gómez Castaño is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.
Based on a work at www.meridi.es/cursos/php.