Autenticación impotente php. ¿Cómo puedo utilizar la autenticación básica HTTP en PHP?
Enviar un mensaje de "Autenticación requerida" al navegador del cliente, lo que a su vez hará que aparezca un cuadro de diálogo para ingresar el nombre de usuario y la contraseña. Después de que el cliente haya ingresado su nombre y contraseña, se llamará nuevamente al script, pero con las variables predefinidas PHP_AUTH_USER, PHP_AUTH_PW y AUTH_TYPE, que contienen respectivamente el nombre de usuario, la contraseña y el tipo de autenticación. Estas variables se pueden encontrar en la matriz $_SERVER y $HTTP_SERVER_VARS. Actualmente sólo se admite la autenticación "básica". También puedes ver más descripción detallada funciones encabezamiento() .
Un ejemplo de un fragmento de script que obliga al cliente a iniciar sesión para ver la página:
Ejemplo de autenticación HTTP
si (!isset($_SERVER [ "PHP_AUTH_USER" ])) ( Hola ($_SERVER["PHP_AUTH_USER"]). Ha ingresado su contraseña ($_SERVER["PHP_AUTH_PW"]).
encabezado ( "WWW-Authenticate: Reino básico="Mi reino"");
eco "Texto enviado cuando
si el usuario hizo clic en el botón Cancelar";
salida;
) demás (
eco"
eco "
}
?>
Nota de compatibilidad: Tenga especial cuidado al especificar encabezados HTTP. Para garantizar la máxima compatibilidad con el numero mas grande varios clientes, la palabra "Básico" debe escribirse con letras mayúsculas"B", la región (reino) debe estar entre comillas dobles (¡no simples!) y exactamente un espacio debe preceder al código. 401 en el título HTTP/1.0 401 .
En lugar de simplemente mostrar las variables PHP_AUTH_USER y PHP_AUTH_PW en la pantalla, es posible que deba verificar que sean correctas. Para hacer esto, use una solicitud para base de datos o buscar un usuario en un archivo dbm.
Puedes observar las características de la obra. navegador de internet Explorador. Es muy exigente con los parámetros de los encabezados transmitidos. Especificar un título WWW-autenticar antes de enviar el estado HTTP/1.0 401 es un pequeño truco.
A partir de PHP 4.3.0, para evitar que alguien escriba un script que revele la contraseña de una página que utiliza autenticación externa, las variables PHP_AUTH no se configuran si esta pagina utiliza autenticación externa y está configurado en modo seguro. Sin embargo, la variable REMOTE_USER se puede utilizar para autenticar a un usuario autenticado externamente. Por lo tanto, siempre puedes usar la variable $_SERVER["REMOTE_USER"].
Nota: PHP usa la directiva AuthType para indicar si se usa autenticación externa o no.
Cabe señalar que todo lo anterior no impide el robo de contraseñas de páginas que requieren autorización por parte de alguien que controla páginas sin autorización ubicadas en el mismo servidor.
Tanto Netscape Navigator como Explorador de Internet borre el caché de autenticación de la ventana actual para una región (reino) determinada cuando se reciba del servidor. Esto se puede utilizar para implementar salida forzada usuario y vuelve a mostrar el cuadro de diálogo para ingresar el nombre de usuario y la contraseña. Algunos desarrolladores utilizan esto para limitar el tiempo de inicio de sesión o proporcionar un botón de cierre de sesión.
Ejemplo de autenticación HTTP con entrada forzada nueva pareja inicio de sesión/contraseña
función autenticar() (
encabezado ( "WWW-Authenticate: Reino básico="Probar sistema de autenticación"");
encabezado ("HTTP/1.0 401 no autorizado");
eco "Debe ingresar el nombre de usuario y la contraseña correctos para obtener acceso al recurso \n";
salida;
}
Si (!isset($_SERVER [ "PHP_AUTH_USER" ]) || Bienvenido: ($_SERVER["PHP_AUTH_USER"])
($_POST [ "Visto antes" ] == 1 && $_POST [ "OldAuth" ] == $_SERVER [ "PHP_AUTH_USER" ])) (
autenticar ();
}
demás(
eco"
"
eco "Inicio de sesión anterior: ($_REQUEST["OldAuth"])";
eco ";
eco "\norte";
eco "\norte";
eco "\norte";
eco "
}
?>
Este comportamiento no se rige por los estándares de autenticación HTTP Básico, por lo que no debes depender de él. Las pruebas han demostrado que el navegador Lynx no borra el caché de autorización cuando recibe un estado 401 del servidor, y al hacer clic en "Atrás" y luego en "Adelante" en secuencia, es posible abrir dicha página, siempre que se cumpla con la autorización requerida. Los atributos no han cambiado. Sin embargo, el usuario puede presionar la tecla "_" para borrar el caché de autenticación.
También cabe señalar que antes Versiones PHP 4.3.3, la autenticación HTTP no funcionó en servidores en ejecución administrado por Microsoft IIS si PHP se instaló como módulo CGI debido a algunas limitaciones de IIS. Para lograr funcionamiento correcto en PHP 4.3.3+, debes editar ajuste de configuración IIS llamado "Seguridad de directorios". Haga clic en la inscripción "Editar" y configure la opción "Acceso anónimo", todos los demás campos deben permanecer sin marcar.
Otra limitación si estás usando IIS vía ISAPI: las variables PHP_AUTH_* no están definidas, pero al mismo tiempo la variable HTTP_AUTHORIZATION está disponible. Código de ejemplo que podría utilizar: list($user, $pw) = explode(":", base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6)));
Nota sobre IIS:: Para que la autenticación HTTP funcione correctamente en IIS, en Configuraciones PHP La opción cgi.rfc2616_headers debe establecerse en 0 (el valor predeterminado).
Atención: En caso de que se utilice el modo protegido, el UID del script actual se agregará a la parte del dominio del encabezado WWW-Authenticate.
<<< Назад | Contenido | Adelante >>> |
Si tiene alguna otra pregunta o algo no está claro, bienvenido a nuestro | |
|
A veces necesitas cerrar acceso no autorizado PHP página si está creando un área cerrada del sitio. Podría ser algún tipo de información oculta para sus clientes o visitantes del sitio, algún tipo de interfaz de administración para usted, etc. Puedes llegar a cientos varias tareas requiriendo restricciones de acceso.
Puede cerrar dicha página de varias formas complementarias:
- Protección por contraseña (nombre de usuario/contraseña) mediante variables $_SERVER["PHP_AUTH_USER"] Y $_SERVER["PHP_AUTH_PW"].
- Protección por IP dirección del cliente usando una variable $_SERVER["REMOTE_ADDR"].
- Protección por IMPERMEABLE dirección en redes locales (además de protección por IP).
Veamos primero el primer método, que es el principal. Le permite bloquear el acceso a la página mediante un nombre de usuario y contraseña, para que solo las personas puedan acceder. aquellos que conocen el inicio de sesión y contraseña. Además, pueden dividirse según este criterio y emitirse en consecuencia. información diversa para todos. Implementado mediante la emisión de campos especiales en el encabezado del protocolo. HTTP. Creemos una función autenticación_envío():
" ,"
Error de autenticación
" ,"Póngase en contacto con el administrador para obtener su nombre de usuario y contraseña.
" ,""; salir; ); ?>Esta función informa al navegador que el acceso requiere autorización mediante un nombre de usuario y contraseña. Y también muestra una página en HTML para el usuario.
" ,"
¡Bienvenido!
" ,"Ha iniciado sesión con el nombre de usuario ",$auth_user" y la contraseña ",$auth_pass".
" ,""; ?>
El código de verificación de inicio de sesión y contraseña no es demasiado complicado en en este caso, ya que está implementado para una sola persona. La lógica de funcionamiento es sencilla si no hay variable. $_SERVER["PHP_AUTH_USER"] Y $_SERVER["PHP_AUTH_PW"] o sus valores no coinciden con los requeridos, luego llame a la función autenticación_envío(). No olvides que al final llama. salida, por lo que la ejecución del programa se detiene.
El siguiente nivel de protección se implementa filtrando IP direcciones del cliente que se conecta. Por supuesto, en Internet, muchos proveedores emiten IP direcciones temporales y esta protección es inútil, pero si estamos hablando de sobre redes locales corporativas, entonces este cheque proporcionará protección adicional.
¡¡¡Tu IP no fue encontrada!!!"; salir; ); ?>
Aquí en la fila $ permitido_ips indicado separado por espacios IP direcciones a las que se permite el acceso. A continuación obtenemos la matriz usando explotar() y buscar la dirección del cliente desde $_SERVER["REMOTE_ADDR"]. Usé la función para buscar. búsqueda_matriz(), ya que es poco probable que su código implementado en C funcione algo más rápido que lo que podemos escribir en PHP usando bucles para o para cada uno. Pero la velocidad no es lo principal aquí :)
Y el último paso de la protección es la verificación. IMPERMEABLE direcciones. Está clasificado como paranoico y debe usarse si accede desde red local y los datos que estás protegiendo son realmente muy importantes. Hasta ahora he implementado esta verificación solo en el sistema. linux, debido a la relativa simplicidad de implementación. Pero puedes intentar implementarlo para cualquier otra plataforma. Escribimos una función:
Como los usuarios de Linux ya han entendido, se basa en ARP tabla del sistema, a la que se puede acceder mediante un archivo /proc/net/arp. La función busca cadenas para el requerido IP dirección y lo devuelve IMPERMEABLE DIRECCIÓN:
Su IP=192.168.10.15 y MAC=00:04:31:E4:F8:37
en el sistema ventanas Quizás también haya algunas formas de conseguirlo. IMPERMEABLE más simple, pero de los que realmente funcionan, esta es la conclusión ARP tablas del sistema con el comando:
C:\WINDOWS\>arp -a Interfaz: 192.168.10.15 en la interfaz 0x1000003 Dirección IP Dirección física Tipo 192.168.10.1 00-50-22-b0-6a-aa dinámico 192.168.10.2 00-0f-38-68-e9-e8 dinámico 192.168.10.3 00-04-61-9e-26-09 dinámico 192.168.10.5 00 -0f-38-6a-b1-18 dinámico
Puede implementar protección basada en esta dirección usted mismo si realmente la necesita :) Pero recuerde que si tiene equipos no administrados en su red sin la capacidad de vincularse IMPERMEABLE direcciones al puerto, es posible que esta protección no funcione, ya que todos sus datos de identificación utilizados para la protección (nombre de usuario, contraseña, dirección IP y MAC) pueden ser falsificados.