Hosting de Calidad
  • Inicio
  • Precios y servicios
  • F.a.q y ayudas
  • Realizar pedido
  • Webs alojadas
  • Quienes somos
  • Foro HyD
  • Contacto

    Zona Dominios

    Entrar
    registro de dominios


    Zona Hosting

    Entrar
    alojamiento web


    5 Métodos de Pago
    Tarjeta de crédito
    Domiciliación
    Transferencia
    Soporte Epagado
    Soporte Paypal

    Liberalización .es

    Ver mas
    dominios .es


  •  
     
     
    Autentificación HTTP con PHP

    Capítulo 16_ 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 16_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"_

    Ejemplo 16_2_ Ejemplo de autentificación HTTP forzando una reentrada

    <?php
      function authenticate() {
        header('WWW_Authenticate: Basic realm="Test Authentication System"');
        header('HTTP/1_0 401 Unauthorized');
        echo "You must enter a valid login ID and password to access this resource\n";
        exit;
      }
     
      if (!isset($_SERVER['PHP_AUTH_USER']) ||
          ($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
       authenticate();
      } 
      else {
       echo "<p>Welcome: {$_SERVER['PHP_AUTH_USER']}<br>";
       echo "Old: {$_REQUEST['OldAuth']}";
       echo "<form action='{$_SERVER['PHP_SELF']}' METHOD='POST'>\n";
       echo "<input type='hidden' name='SeenBefore' value='1'>\n";
       echo "<input type='hidden' name='OldAuth' value='{$_SERVER['PHP_AUTH_USER']}'>\n";
       echo "<input type='submit' value='Re Authenticate'>\n";
       echo "</form></p>\n";
      }
    ?>

    Este comportamiento no es requerido por el estándar de autentificación básica de HTTP, por lo que nunca debe depender de esto_ Pruebas con Lynx han demostrado que Lynx no borra las credenciales de autentificación con una respuesta 401 del servidor, por lo que pulsando atrás y después adelante abriría el recurso de nuevo (siempre que los requerimientos de contraseña no hayan cambiado)_

    Además tener en cuenta que hasta la version de PHP 4_3_3, la autentificación HTTP no funcionaba con el servidor IIS de Microsoft y la versión CGI de PHP, debido a una limitación de IIS_ Para que funcione a partir de PHP 4_3_3, debeis de editar vuestra configuración sobre "Seguridad en directorios" en IIS_ Pulsar en 'Editar" y elegir solamente "acceso anonimo", todos los demas campos no se deben de elegir_

    Otra limitación es, si estais usando el módulo de IIS (ISAPI), que no podeis usar las variables PHP_AUTH_*, en su lugar debeis utilizar la variable HTTP_AUTHORIZATION_ Por ejemplo: list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

    Nota para IIS:: Para que la autentificación HTTP funcione con IIS, la directiva de PHP cgi_rfc2616_headers debe de tener el valor 0 (valor por defecto)_

    Nota: Si safe mode está activado, el uid de el script es agregado a la cabecera WWW_Authenticate

     
       



    registro de dominios | alojamiento web | hosting por publicidad

       

     

    Manual de linux Manual de apache Manual de php Manual de mysql Manual de SQL Manual del Plesk Como funciona Paypal Manual de html