Está usted en Indice > Construcción > Lenguajes > PHP > Lecciones y Paso a Paso > Autentificación HTTP con PHP
Construcción
Maletín
Utilidades
Cursos
Promoción
Rentabilidad
Zona Novatos
Foros
Acceso a tu cuenta

Autentificación HTTP con PHP

Las caracteríticas de autentificación HTTP en PHP solo están disponibles cuando se está ejecutando como un módulo en Apache y hasta ahora no lo estan en la versión CGI. En un script PHP como módulo de Apache, se puede usar la función header() para enviar un mensaje de "Autentificación requerida" al navegador cliente haciendo que muestre una ventana de entrada emergente con nombre de usuario y contraseña. Una vez que el usuario ha rellenado el nombre y la contraseña, la URL que contiene el script PHP será llamada de nuevo con las variables predefinidas PHP_AUTH_USER , PHP_AUTH_PW , y AUTH_TYPE asignadas con el nombre de usuario, la contraseña y el tipo de autentificación respectivamente. Estas variables predefinidas se pueden encontrar en las matrices $_SERVER y $HTTP_SERVER_VARS . Sólo autentificación "Básica" está soportada en este momento. Consulte la función header() para más información.

Nota sobre la versión PHP: Las Autoglobales , tales como $_SERVER, han estado disponibles desde la versión de PHP 4.1.0 . $HTTP_SERVER_VARS ha estado disponible desde PHP 3.

Un script de ejemplo que fuerce la autentificación del cliente en una página sería como el siguiente:

Ejemplo 34-1. Ejemplo de autentificación HTTP

<?php
if (!isset( $_SERVER [ 'PHP_AUTH_USER' ])) {
header ( 'WWW-Authenticate: Basic realm="My Realm"' );
header ( 'HTTP/1.0 401 Unauthorized' );
     echo 'Text to send if user hits Cancel button' ;
     exit;
   } else {
     echo "<p>Hello { $_SERVER [ 'PHP_AUTH_USER' ]} .</p>" ;
     echo "<p>You entered { $_SERVER [ 'PHP_AUTH_PW' ]} as your password.</p>" ;
   }
?>

Nota de compatibilidad: Por favor tener cuidado cuando esteis programando las lineas de cabecera HTTP. Para garantizar la máxima compatibilidad con todos los clientes, la palabra clave "Basic" debe de ser escrita con "B" mayúscula, la cadena de texto debe estar incluida entre comillas dobles (no simples) y exactamente un espacio debe preceder el código 401 en la linea de cabecera HTTP/1.0 401

En vez de, sencillamente, mostrar PHP_AUTH_USER y PHP_AUTH_PW , seguramente querais comprobar la validez del nombre de usuario y la contraseña. Tal vez enviando una consulta a una base de datos o buscando el usuario en un fichero dbm.

Vigilar aquí los navegadores Interner Explorer con bugs. Parecen muy quisquillosos con el orden de las cabeceras. Enviar la cabecera WWW-Autentificación antes que la cabecera HTTP/1.0 401 parece ser el truco por ahora.

En fecha de la versión PHP 4.3.0, para prevenir que alguien escriba un script que revele la contraseña de una página que ha sido autentificada a través de algún mecanismo externo tradicional, las variables PHP_AUTH no serán asignadas si algún tipo de autentificación externa ha sido activada para la página en particular. En este caso, la variable REMOTE_USER puede ser usada para identificar al usuario autentificado externamente. Asi que se puedes utilizar $_SERVER['REMOTE_USER'] .

Configuration Note: PHP usa la directiva AuthType para determinar si una autentificación externa esta en uso.

Nota, a pesar de todo, lo ya dicho no proteje de que alguien que controle una URL no autentificada robe contraseñas de URLs autentificadas en el mismo servidor.

Tanto Netscape como Internet Explorer borrarán la caché de la ventana de autentificación en el navegador local después de recibir una respuesta 401 del servidor. Esto puede usarse, de forma efectiva, para "desconectar" a un usuario, forzandole a reintroducir su nombre y contraseña. Algunas personas usan esto para "hacer caducar" entradas, o para proveer un botón de "desconectar".



Usuarios que han visto este tema también han visto...

- Pasar saltos de línea de BD a HTML
- Calcular días hábiles en PHP
- Arreglar error con acentos en Google Coop
- Control de permisos en PHP con phpGACL
- Redimensionar imágenes con PHP


Versión imprimible - Versión imprimible de este documento
Enviar e-mail - Enviar por e-mail este documento
Publicidad

Información legal | Política de Privacidad | Contacte con nosotros

Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.


Página generada el 20-11-2008 a las 00:10:10