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" ])) (
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
"

Hola ($_SERVER["PHP_AUTH_USER"]).

" ;
eco "

Ha ingresado su contraseña ($_SERVER["PHP_AUTH_PW"]).

"
;
}
?>

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" ]) ||
($_POST [ "Visto antes" ] == 1 && $_POST [ "OldAuth" ] == $_SERVER [ "PHP_AUTH_USER" ])) (
autenticar ();
}
demás(
eco
"

Bienvenido: ($_SERVER["PHP_AUTH_USER"])
" ;
eco "Inicio de sesión anterior: ($_REQUEST["OldAuth"])";
eco "

\norte";
eco "\norte";
eco "\norte";
eco "\norte";
eco "

\n" ;
}
?>

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:

  1. Protección por contraseña (nombre de usuario/contraseña) mediante variables $_SERVER["PHP_AUTH_USER"] Y $_SERVER["PHP_AUTH_PW"].
  2. Protección por IP dirección del cliente usando una variable $_SERVER["REMOTE_ADDR"].
  3. 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.



5 respuestas

¿Cómo funciona PHP? Si esto sucede a través de Apache mod_cgi, me temo que no podrá obtener la información de autenticación. Apache no lo pasará a aplicaciones CGI a menos que lo compile con el indicador SECURITY_HOLE_PASS_AUTHORIZATION. (Si esto es realmente un agujero de seguridad o no, depende de si otros usuarios de su servidor tienen privilegios más bajos o más altos que los usuarios de su sitio).

Si es IIS CGI, debes asegurarte de configurar solo " Acceso anónimo al directorio" o IIS intentará iniciar sesión y autenticar las credenciales por sí mismos.

Eco"

Hola ($_SERVER["PHP_AUTH_USER"]).

";

Agujero de seguridad en la inyección de HTML (bueno, si funcionara). Utilice htmlspecialchars(). Hombre, esta es una página de documentos PHP llena de consejos y códigos muy cuestionables.

También puedes consultar $_SERVER["HTTP_AUTHORIZATION"] , aunque sospecho que se trata de un problema de mod_cgi, en cuyo caso ninguna de las variables estará presente y tendrás que recurrir a un nombre basado galletas. O ve a un anfitrión con más enfoque moderno a alojamiento PHP, como FastCGI o mod_php.

en .htaccess agrega esto:

RewriteEngine en RewriteRule .* -

y al comienzo de tu script agrega esto:

Lista($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]) = explotar(":" , base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6)));

Prueba esto:

\n"); imprimir(" \n"); imprimir(" Listado 24-1\n"); imprimir("\n"); imprimir(" \n"); ) función página final() ( imprimir("

\n"); imprimir("\n"); ) /* ** prueba de nombre de usuario/contraseña */ if((isset($_SERVER["PHP_AUTH_USER"]) && ($_SERVER["PHP_AUTH_USER"] == "leon")) AND (isset( $_SERVER["PHP_AUTH_PW"]) && ($_SERVER["PHP_AUTH_PW"] == "secret"))) ( startPage(); print("¡Has iniciado sesión correctamente!
\n"); endPage(); ) else ( //Enviar encabezados para que un navegador solicite //nombre de usuario y contraseña del encabezado del usuario("WWW-Authenticate: " . "Reino básico=\"Área protegida de León\"" ); header("HTTP/1.0 401 No autorizado"); //Mostrar texto de error, que los navegadores normalmente //muestran sólo después de varios intentos fallidos print("Esta página está protegida por HTTP " . "Autenticación.
\nUsar León" . "para el nombre de usuario, y secreto" . "para la contraseña.
\n"); ) ?>

Asegúrese de anular las variables $_SERVER['PHP_AUTH_USER'] y $_SERVER['PHP_AUTH_PW'] hasta el punto en que intenta acceder a ambas variables.

Si lo anterior no es el caso, utilice check si está utilizando php como mod cgi o no. Si está utilizando php como mod cgi, en la mayoría de los casos no obtendrá $_SERVER['PHP_AUTH_USER'] y $_SERVER['PHP_AUTH_PW'] porque en caso general No compilaremos Apache con la opción SECURITY_HOLE_PASS_AUTHORIZATION. Entonces, si desea obtener ambas variables, vuelva a compilar Apache con la opción SECURITY_HOLE_PASS_AUTHORIZATION o puede usar el enfoque .htaccess descrito en

Introducción

Este es un programa de capacitación que debería mostrarle los conceptos básicos para proteger sus páginas en Internet usando autenticación HTTP. En lugar del método tradicional .htaccess ( servidor apache), vamos a utilizar para almacenar los datos de los usuarios y sus contraseñas en MySQL. Intentaré explicar lo más posible lo que, en mi opinión, se requiere para que un principiante aprenda MySQL y PHP. En principio, basándose en este programa puedes utilizar cualquier DBMS (sistema de gestión de bases de datos). ¿Por qué es interesante este método? Bueno, por ejemplo, aunque solo sea porque si usa una base de datos, puede permitir fácilmente que solo un determinado grupo (persona) tenga ciertos derechos para acceder a tal o cual información. Si utiliza el método tradicional .htaccess Apache, debe agregar manualmente los usuarios y la contraseña en el archivo de contraseñas. y la ventaja este método Bueno... compruébalo tú mismo.

Software que es necesario:

· Plataforma *nix (Linux, Unix, *BSD) · PHP 3.0.x o PHP 4.x · MySQL (cualquier versión)

Paso número uno

Adelante, lo primero que debemos averiguar es si queremos permitir que los usuarios que están en nuestra base de datos accedan a la página especificada. ¿Y cómo vamos a hacer esto? (a mucha gente no le gusta mucho, pero hay que acostumbrarse a coger un papel antes de programar y anotar todos los requisitos que queremos sacar del programa, a la larga ahorrarás horas o quizá días para realizar cambios en el código (aprox.))

Compruebe si el usuario ya está autenticado.

En caso contrario envía un mensaje al navegador, con un mensaje y un formulario de acceso.

Si el usuario pulsa en el botón cancelar, no permitirle el acceso y redirigirlo a... 403: Acceso denegado, o mostrar (cookie J) un mensaje simple.

Si el usuario ha completado una combinación de nombre de usuario y contraseña, verifíquelos en base de datos mysql datos y asegurarse de que sean correctos, si el resultado es positivo permitir el acceso.

Si no entiendes todo, no te preocupes, ¡quedará claro más tarde (o tal vez nunca)!

Paso dos: cree nuestra base de datos

Queremos que la base de datos almacene el nombre de usuario y la contraseña de nuestros usuarios. Los campos obligatorios se pueden agregar fácilmente a base existente datos, pero asumiremos por ahora que no está agregando a una base de datos existente, sino que está creando una nueva. El siguiente código es una descripción de cómo hacer esto. Supuesto: si tiene Apache en su computadora, puede comenzar inmediatamente :)

mysql> crear miembros de la base de datos;
mysql> crear tabla usuarios (
nombre de usuario varchar(25) NO NULO,
contraseña varchar(15) NO NULA,
clave principal (nombre de usuario),
nombre de usuario único (nombre de usuario)
);

Ahora tenemos una base de datos para almacenar usuarios, se supone que el nombre de usuario tiene hasta 25 caracteres y las contraseñas tienen hasta 15 caracteres. (si por alguna razón no le conviene, configúrelo como mejor le parezca) El nombre de usuario debe tener el valor " clave primaria" y ser "único" porque no queremos 2 o mas gente tenía el mismo nombre de usuario.

Tenga en cuenta que los nombres de usuario serán sensibles a próximo caso, el usuario "Vasya" se identificará de forma diferente al usuario "vasya", en otras palabras, distingue entre mayúsculas y minúsculas. Ahora agregaremos un usuario de prueba a MySQL para que podamos usar sus datos para las pruebas cuando creemos la página PHP.

mysql> otorgar selección en miembros.usuarios
a httpusuario@localhost
identificado por "Mi Contraseña";

Esto es para que cuando queramos consultar el usuario y contraseña de una persona registrada en nuestra base de datos, utilizaremos el usuario "httpuser" con la contraseña "MyPassword". Finalmente debemos agregar el usuario y contraseña de la persona a la que queremos permitirle el acceso.

mysql> insertar en el valor de los usuarios ("john_doe", "eod_nhoj");

Deliberadamente no cifré los datos en el programa, para que en caso de pérdida de la contraseña no tuviera que descifrarlos y simplificarlos al mínimo :)) Eso es todo, terminamos con MySQL, ahora pasemos ¡en!

Paso tres: escribe código PHP

Antes de comenzar, describiré brevemente lo que hará la paga.

01 02
Cuando llegue a una página segura, el servidor enviará una solicitud y mostrará una página para ingresar su nombre y contraseña. Si hace clic en el botón cancelar o ingresa datos incorrectos, el servidor le enviará (encabezado 401 no autorizado y denegará el acceso). Así es como el mensaje generalmente traduce la línea (encabezado 401 no autorizado y denegará el acceso). No lo explico, en mi opinión no hay mejor manera de decirlo!!! En caso de que ingreses todo correctamente, resulta que simplemente obtendrás acceso (eso es lo que necesitaba ser probado). Ahora la parte divertida, este es el mismo código. Está escrito deliberadamente con números de línea, después del código (a continuación) se dan explicaciones para las líneas.
03 función acceso_denied() (
05 }
06
04 echo "401 No autorizado: La combinación de nombre de usuario/contraseña que ingresó no era válida.n";
07 función auth_headers ($título) (
08 Encabezado("WWW-Authenticate: Reino básico="$título"");
10 }
11
09 Encabezado("HTTP/1.0 401 No autorizado");
12 si(!isset($PHP_AUTH_USER)) (
13 auth_headers("Mi página web protegida");
14 acceso_denied();
16 }
15 salidas;
18
17 más (
19 $nombredehost = "localhost";
20 $nombre de usuario = "httpusuario";
22 $base de datos = "miembros";
23
24 $query = "seleccione nombre de usuario, contraseña de usuarios donde nombre de usuario="$PHP_AUTH_USER" y contraseña="$PHP_AUTH_PW"";
25 $link = mysql_connect($localhost, $nombre de usuario, $contraseña) o die("No se puede conectar al servidor de la base de datos");
26
27 si (mysql_num_rows(mysql_db_query($base de datos, $consulta)) == 0) (
28 auth_headers("Mi página web protegida");
29 acceso_denied();
30 salidas;
31 }
32
33 mysql_close($enlace);
34 }
35 ?>

Ese es el truco, funciona, funciona, puedes usarlo donde quieras, cuando quieras y como quieras, cámbialo, mejoralo, si logras reducir el código a dos líneas al guardar. funcionalidad programa, entonces asegúrese de enviármelo!!!

En esta sección, exploraremos rápidamente cada línea para evitar acalorados intercambios de preguntas por adelantado en los comentarios de este artículo.

Línea 3:
Esta función mostrará un mensaje si un "usuario maligno" ingresa persistentemente datos incorrectos. Hice de esto una función porque la usamos dos veces y solo para acortar el código fuente.

Línea 7:
Como también usamos este encabezado dos veces, también lo convertí en una función.

Línea 8:
Pase un encabezado al navegador que obligará al usuario a ingresar su nombre de usuario y contraseña. La variable $title se mostrará en el cuadro de diálogo de inicio de sesión.

Línea 9:
En la primera solicitud, se muestra un encabezado; cuando se cancela nuevamente, se muestra un mensaje indicando que el acceso está denegado.

Línea 12:
$PHP_AUTH_USER es un bucle que muestra un mensaje que dice que la página está protegida y ¡lárgate!

Línea 19-23:
Esto es algo que nadie sabe excepto usted, es decir, los medios para conectarse a la base de datos, el nombre del host, los nombres de la base de datos, el nombre de usuario y la contraseña. (para conectarse a MySQL)

Línea 24:
Una consulta MySQL que devuelve nombres de usuario y contraseñas.

Línea 25:
¡Establezca una conexión con MySQL y muestre una maldición si no hay conexión! (Esto significa que tiene algún problema en las líneas 19-23, o que no hay MySQL en absoluto)

Línea 27:
Proceso $consulta. Si devuelve - 0, significa que se ingresó una combinación no válida.

Línea 33:
Desconecte la conexión a MySQL.

Recomendaría guardar el código PHP en un archivo llamado user_auth.php, user_auth.php3, o... (aquí está tu imaginación sobre este tema). Supongamos que guardaste este código en el archivo user_auth.php. Siempre que de repente queremos proteger nuestra página ultrasecreta en la red, simplemente incluimos este archivo. Lo único que me gustaría llamar tu atención es que lógicamente necesitas conectarlo en la parte superior de tu página PHP protegida, te aconsejo que escribas lo siguiente en la línea número 1 de tus páginas:

donde "user_auth.php" es el nombre del archivo en el que guardó el código.

Tu pregunta: no uso MySQL, ¿qué debo hacer?

Consulta con el administrador de tu servidor, si resulta ser amable, entonces te ayudará, para él son 5 minutos de trabajo, si el malvado no ayuda, entonces ve al foro relacionado con la base de datos que estás usando y gritando pidiendo ayuda! O si te consideras un programador normal, entonces... no necesitarás este código en absoluto, y crearás “sesiones”, cifrarás con usando PGP en general pervertirlo como si estuvieras haciendo protección para amazon.com

No es raro encontrar autenticación en sitios web implementados usando archivo de configuración .htaccess. La simplicidad de configuración y la fiabilidad son las principales ventajas de este tipo de autorización.

Directivas de archivos. htaccess.

AuthName "El texto se muestra en la ventana de autorización" AuthType Básico AuthUserFile Ruta completa/.htpasswd requiere usuario válido

Nombre de autenticación- el texto contenido en esta directiva se muestra en la ventana de entrada de contraseña. Debe escribirse en una línea y entre comillas dobles.

Tipo de autenticación- tipos de autenticación: Básico o Digerir. Se recomienda utilizar el primero, porque el segundo no es compatible con todos los navegadores.

Archivo de usuario de autenticación- ruta completa al archivo con nombres de usuario y contraseñas para la autenticación del usuario. Las contraseñas están contenidas en forma cifrada. Almacenamiento recomendado este archivo en una carpeta a la que no pueden acceder los usuarios, esto es necesario para evitar el robo de contraseñas.

requerir usuario válido- La directiva especifica que sólo los usuarios que se hayan autenticado correctamente pueden acceder a la URL.

¿Dónde se puede implementar?

La autorización se puede adjuntar a cualquier directorio de su sitio, ya sea la raíz o una carpeta en la jerarquía. Muy a menudo puedes encontrar protección usando .htaccess, para ingresar al “Panel de Control” del sitio. Además, con esta tecnología, puede limitar el acceso a las carpetas donde se encuentran los datos confidenciales.

Así que creemos un directorio llamado CMS(puedes elegir cualquier nombre). Contendrá: archivo de configuración.htaccess Y archivo con contraseñas.htpasswd., así como todos los demás archivos y carpetas a los que desee tener acceso restringido.

Configurando el archivo .htaccess

Crea un archivo usando el bloc de notas normal .htaccess(el punto antes del nombre es obligatorio), en la carpeta CMS, complételo con las directivas indicadas anteriormente. Para llenar la directiva Archivo de usuario de autenticación debe ser especificado camino completo al archivo de contraseña .htpasswd, que se encuentra en la misma carpeta.

¿Cómo saber la ruta completa a un archivo?

La ruta completa al archivo se puede encontrar usando la función phpinfo(). El resultado de su ejecución será tabla detallada configuración del servidor web.

Crea un archivo info.php con el contenido., en el directorio CMS. Inicie el archivo a través de su navegador. En la tabla resultante, encuentre la variable SCRIPT_FILENAME, que contiene ruta completa al archivo.

Después de recibir los datos necesarios, asegúrese de eliminar el archivo info.php para que la información sobre la configuración del servidor web no esté disponible públicamente.

Fig 1. Ruta completa al archivo. Resultado de la ejecución de la función phpinfo()

Copie la ruta resultante, reemplazar contiene el nombre del archivo, información.php en .htpasswd y ponerlo en una directiva Archivo de usuario de autenticación.

AuthUserFile Z:/home/localhost/www/scripts/CMS/.htpasswd

De este modo, archivo .htaccess listo para usar, contendrá las siguientes directivas:

AuthName "Autenticación" AuthType Básico AuthUserFile Z:/home/localhost/www/scripts/CMS/.htpasswd requiere usuario válido

Creando un archivo. htpasswd

Pasemos a crear un archivo con contraseñas. . htpasswd, para ello usaremos la utilidad htpasswd.exe. Necesitas trabajar con ello a través de línea de comando. Los siguientes son ejemplos de cómo trabajar con la utilidad:

. Crear nuevo archivo con contraseñas, asígnele un nombre.htpasswd, establezca el cifrado de contraseña utilizando el algoritmo MD5 y agréguele el inicio de sesión de administrador:

Htpasswd -cm .htpasswd administrador

-centímetro- teclas de utilidad:

-Con- indica que es necesario crear un nuevo archivo

-metro-cifra contraseñas usando el algoritmo MD5

.htpasswd- nombre del archivo con contraseñas

administración- acceso

Arroz. 2. Cree un nuevo archivo con contraseñas usando la utilidad htpasswd.exe

. Añadir a ya archivo existente con nuevas contraseñas de usuario. Para hacer esto, debe especificar una clave -m en el comando, omitir la clave -c.

Htpasswd -m .htpasswd usuario

Arroz. 3. Agregar un nuevo usuario a un archivo existente con contraseñas usando la utilidad htpasswd.exe.

. Para cambiar la contraseña de un usuario existente, use el mismo comando que al agregar.

Htpasswd -m .htpasswd usuario

Fig 4. Cambiar la contraseña de un usuario existente utilizando la utilidad htpasswd.exe.

Después de crear un archivo con contraseñas, colóquelo en el directorio cuya ruta se especifica en la directiva. Archivo de usuario de autenticación Archivo .htaccess. (en nuestro caso a la carpeta CMS)

Acceso a los datos de autorización a través de variables de matriz $_SERVER

Después de una autenticación exitosa, el nombre de usuario y la contraseña ingresados ​​por el usuario se colocan en la matriz superglobal $_SERVER, que se puede procesar con usando php guion.

  • $_SERVER["PHP_AUTH_USER"]- acceso;
  • $_SERVER["PHP_AUTH_PW"]- contraseña;

Resultado

Ahora, si va a la carpeta de su navegador donde se encuentra el archivo de configuración .htaccess, recibirá una ventana emergente donde deberá ingresar su nombre de usuario y contraseña. Si la autorización se realiza correctamente, se abrirá el acceso a la carpeta.

Arroz. 5. Ventana de autenticación.

Resumamos:

  • Usando un archivo de configuración .htaccess, puede restringir el acceso a cualquier directorio de su sitio;
  • Para crear un archivo .htaccess use un bloc de notas normal;
  • Para especificar la ruta completa al archivo de contraseña .htpasswd, en la directiva Archivo de usuario de autenticación archivo .htaccess, usa la función phpinfo();
  • Para crear un archivo con contraseñas. htpasswd, utilice la utilidad htpasswd.exe;
  • Colocar un archivo con contraseñas .htpasswd, en la carpeta a la que sin acceso para los usuarios para evitar el robo de contraseñas;
  • Acceso a los datos de autorización realizado a través de variables matriz superglobal$_SERVIDOR: $_SERVER["PHP_AUTH_USER"] , $_SERVER["PHP_AUTH_PW"];



Arriba