Descripción: | Autenticación de formulario |
---|---|
Estado: | Base |
ModuleIdentifier: | auth_form_module |
Archivo fuente: | mod_auth_form.c |
Compatibilidad: | Disponible en Apache 2.3 y posterior |
Resumen
Advertencia
La autenticación del formulario depende del mod_session
módulos, y estos módulos hacen uso de cookies HTTP y, como tales, pueden ser víctimas de ataques de Cross Site Scripting o exponer información potencialmente privada a los clientes. Asegúrese de que se hayan tenido en cuenta los riesgos relevantes antes de habilitar la función de sesión en su servidor.
Este módulo permite el uso de un formulario de inicio de sesión HTML para restringir el acceso buscando usuarios en los proveedores dados. Los formularios HTML requieren una configuración significativamente mayor que las alternativas, sin embargo, un formulario de inicio de sesión HTML puede proporcionar una experiencia mucho más amigable para los usuarios finales.
La autenticación básica HTTP es proporcionada por mod_auth_basic
y la autenticación implícita HTTP es proporcionada por mod_auth_digest
. Este módulo debe combinarse con al menos un módulo de autenticación como mod_authn_file
y un módulo de autorización como mod_authz_user
.
Una vez que el usuario se haya autenticado con éxito, los datos de inicio de sesión del usuario se almacenarán en una sesión proporcionada por mod_session
.
Configuracion basica
Para proteger una URL en particular con mod_auth_form
, debe decidir dónde guardará su sesióny deberá decidir qué método utilizará para autenticarse. En este ejemplo simple, los detalles de inicio de sesión se almacenarán en una sesión basada en mod_session_cookie
, y la autenticación se intentará contra un archivo usando mod_authn_file
. Si la autenticación no tiene éxito, el usuario será redirigido a la página de inicio de sesión del formulario.
Ejemplo básico
<Location "/admin"> AuthFormProvider file AuthUserFile "conf/passwd" AuthType form AuthName "/admin" AuthFormLoginRequiredLocation "http://example.com/login.html" Session On SessionCookieName session path=/ Require valid-user </Location>
La directiva AuthType
habilitará el mod_auth_form
autenticación cuando se establece en el valor formulario. Las directivas AuthFormProvider
y AuthUserFile
especificar que los nombres de usuario y las contraseñas se deben comparar con el archivo elegido.
Las directivas Session
y SessionCookieName
sesión almacenada dentro de una cookie HTTP en el navegador. Para obtener más información sobre las diferentes opciones para configurar una sesión, lea la documentación de mod_session
.
Opcionalmente, puede agregar un SessionCryptoPassphrase
para crear una cookie de sesión cifrada. Esto requirió el módulo adicional mod_session_crypto
ser cargado.
En el ejemplo simple anterior, una URL ha sido protegida por mod_auth_form
, pero el usuario aún no ha tenido la oportunidad de ingresar su nombre de usuario y contraseña. Las opciones para hacerlo incluyen proporcionar una página de inicio de sesión independiente dedicada para este propósito, o para proporcionar la página de inicio de sesión en línea.
Inicio de sesión independiente
El formulario de inicio de sesión se puede alojar como una página independiente o se puede proporcionar en línea en la misma página.
Al configurar el inicio de sesión como una página independiente, los intentos de autenticación fallidos deben redirigirse a un formulario de inicio de sesión creado por el sitio web para este propósito, utilizando el AuthFormLoginRequiredLocation
directiva. Por lo general, esta página de inicio de sesión contendrá un formulario HTML, solicitando al usuario que proporcione su nombre de usuario y contraseña.
Formulario de inicio de sesión de ejemplo
<form method="POST" action="/dologin.html"> Username: <input type="text" name="httpd_username" value="" /> Password: <input type="password" name="httpd_password" value="" /> <input type="submit" name="login" value="Login" /> </form>
La parte que realiza el inicio de sesión real es manejada por el controlador de inicio de sesión de formulario. La acción del formulario debe apuntar a este controlador, que está configurado dentro de Apache httpd de la siguiente manera:
Ejemplo de controlador de inicio de sesión de formulario
<Location "/dologin.html"> SetHandler form-login-handler AuthFormLoginRequiredLocation "http://example.com/login.html" AuthFormLoginSuccessLocation "http://example.com/admin/index.html" AuthFormProvider file AuthUserFile "conf/passwd" AuthType form AuthName /admin Session On SessionCookieName session path=/ </Location>
Las URL especificadas por el AuthFormLoginRequiredLocation
Por lo general, la directiva apuntará a una página que le explica al usuario que su intento de inicio de sesión no tuvo éxito y que debe intentarlo de nuevo. los AuthFormLoginSuccessLocation
La directiva especifica la URL a la que se debe redirigir al usuario al iniciar sesión correctamente.
Alternativamente, la URL para redirigir al usuario en caso de éxito se puede incrustar dentro del formulario de inicio de sesión, como en el ejemplo siguiente. Como resultado, el mismo controlador de inicio de sesión de formulario se puede reutilizar para diferentes áreas de un sitio web.
Ejemplo de formulario de inicio de sesión con ubicación
<form method="POST" action="/dologin.html"> Username: <input type="text" name="httpd_username" value="" /> Password: <input type="password" name="httpd_password" value="" /> <input type="submit" name="login" value="Login" /> <input type="hidden" name="httpd_location" value="http://example.com/success.html" /> </form>
Inicio de sesión en línea
Advertencia
Existe el riesgo de que, en determinadas circunstancias, el formulario de inicio de sesión configurado mediante el inicio de sesión en línea pueda enviarse más de una vez, revelando las credenciales de inicio de sesión de la aplicación que se ejecuta debajo. El administrador debe asegurarse de que la aplicación subyacente esté debidamente protegida para evitar abusos. En caso de duda, utilice la configuración de inicio de sesión independiente.
Como alternativa a tener una página de inicio de sesión dedicada para un sitio web, es posible configurar mod_auth_form
para autenticar a los usuarios en línea, sin ser redirigidos a otra página. Esto permite conservar el estado de la página actual durante el intento de inicio de sesión. Esto puede resultar útil en una situación en la que está en vigor una sesión de tiempo limitado y la sesión se agota en medio de la solicitud del usuario. El usuario puede volver a autenticarse en el lugar y puede continuar donde lo dejó.
Si un usuario no autenticado intenta acceder a una página protegida por mod_auth_form
que no está configurado con un AuthFormLoginRequiredLocation
directiva, una HTTP_UNAUTHORIZED El código de estado se devuelve al navegador indicándole al usuario que no está autorizado para ver la página.
Para configurar la autenticación en línea, el administrador anula el documento de error devuelto por el HTTP_UNAUTHORIZED código de estado con un documento de error personalizado que contiene el formulario de inicio de sesión, de la siguiente manera:
Ejemplo básico en línea
AuthFormProvider file ErrorDocument 401 "/login.shtml" AuthUserFile "conf/passwd" AuthType form AuthName realm AuthFormLoginRequiredLocation "http://example.com/login.html" Session On SessionCookieName session path=/
La página del documento de error debe contener un formulario de inicio de sesión con una propiedad de acción vacía, como se muestra en el siguiente ejemplo. Esto tiene el efecto de enviar el formulario a la URL protegida original, sin que la página tenga que saber cuál es esa URL.
Ejemplo de formulario de inicio de sesión en línea
<form method="POST" action=""> Username: <input type="text" name="httpd_username" value="" /> Password: <input type="password" name="httpd_password" value="" /> <input type="submit" name="login" value="Login" /> </form>
Cuando el usuario final haya completado sus datos de inicio de sesión, el formulario realizará una solicitud HTTP POST a la URL original protegida con contraseña. mod_auth_form
interceptará esta solicitud POST, y si se encuentran campos HTML presentes para el nombre de usuario y la contraseña, el usuario iniciará sesión y la URL original protegida con contraseña se devolverá al usuario como una solicitud GET.
Inicio de sesión en línea con preservación corporal
Una limitación de la técnica de inicio de sesión en línea descrita anteriormente es que si una POST de formulario HTML ha dado lugar a la solicitud de autenticación o reautenticación, se perderá el contenido del formulario original publicado por el navegador. Dependiendo de la función del sitio web, esto podría presentar inconvenientes importantes para el usuario final.
mod_auth_form
aborda esto al permitir que el método y el cuerpo de la solicitud original se incrusten en el formulario de inicio de sesión. Si la autenticación es exitosa, Apache httpd volverá a intentar el método y el cuerpo originales, conservando el estado de la solicitud original.
Para habilitar la preservación del cuerpo, agregue tres campos adicionales al formulario de inicio de sesión como se muestra en el siguiente ejemplo.
Ejemplo con preservación corporal
<form method="POST" action=""> Username: <input type="text" name="httpd_username" value="" /> Password: <input type="password" name="httpd_password" value="" /> <input type="submit" name="login" value="Login" />
<input type="hidden" name="httpd_method" value="POST" /> <input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" /> <input type="hidden" name="httpd_body" value="name1=value1&name2=value2" />
</form>
La forma en que el método, el tipo MIME y el cuerpo de la solicitud original se integran en el formulario de inicio de sesión dependerá de la plataforma y la tecnología que se utilice en el sitio web.
Una opción es utilizar el mod_include
módulo junto con el KeptBodySize
directiva, junto con un script CGI adecuado para incrustar las variables en el formulario.
Otra opción es renderizar el formulario de inicio de sesión utilizando un script CGI u otra tecnología dinámica.
Ejemplo CGI
AuthFormProvider file ErrorDocument 401 "/cgi-bin/login.cgi" ...
Saliendo de tu cuenta
Para permitir que un usuario cierre la sesión de una sesión en particular, configure una página para que sea manejada por el formulario-logout-handler. Cualquier intento de acceder a esta URL hará que el nombre de usuario y la contraseña se eliminen de la sesión actual, lo que efectivamente cerrará la sesión del usuario.
Al establecer el AuthFormLogoutLocation
directiva, se puede especificar una URL a la que se redirigirá el navegador al cerrar la sesión correctamente. Esta URL puede explicar al usuario que se ha desconectado y darle la opción de volver a iniciar sesión.
Ejemplo de cierre de sesión básico
SetHandler form-logout-handler AuthName realm AuthFormLogoutLocation "http://example.com/loggedout.html" Session On SessionCookieName session path=/
Tenga en cuenta que cerrar la sesión de un usuario no elimina la sesión; simplemente elimina el nombre de usuario y la contraseña de la sesión. Si esto da como resultado una sesión vacía, el efecto neto será la eliminación de esa sesión, pero esto no está garantizado. Si desea garantizar la eliminación de una sesión, configure el SessionMaxAge
directiva a un valor pequeño, como 1 (establecer la directiva en cero significaría que no hay límite de edad de sesión).
Ejemplo de caducidad de sesión básica
SetHandler form-logout-handler AuthFormLogoutLocation "http://example.com/loggedout.html" Session On SessionMaxAge 1 SessionCookieName session path=/
Nombres de usuario y contraseñas
Tenga en cuenta que el envío del formulario implica URLEncoding los datos del formulario: en este caso, el nombre de usuario y la contraseña. Por lo tanto, debe elegir nombres de usuario y contraseñas que eviten los caracteres codificados en URL en el envío de formularios, o puede obtener resultados inesperados.
AuthFormAuthoritative Directive
Descripción: | Establece si la autorización y la autenticación se pasan a módulos de nivel inferior. |
---|---|
Sintaxis: |
AuthFormAuthoritative On|Off |
Defecto: |
AuthFormAuthoritative On |
Contexto: | directorio, .htaccess |
Anular: | AuthConfig |
Estado: | Base |
Módulo: | mod_auth_form |
Normalmente, cada módulo de autorización enumerado en AuthFormProvider
intentará verificar al usuario, y si el usuario no se encuentra en ningún proveedor, se le negará el acceso. Establecer el AuthFormAuthoritative
directiva explícitamente para Off
permite que tanto la autenticación como la autorización se pasen a otros módulos no basados en proveedores si hay sin ID de usuario o regla que coincida con el ID de usuario proporcionado. Esto solo debería ser necesario al combinar mod_auth_form
con módulos de terceros que no están configurados con el AuthFormProvider
directiva. Cuando se utilizan dichos módulos, el orden de procesamiento se determina en el código fuente de los módulos y no es configurable.
Directiva AuthFormBody
Descripción: | El nombre de un campo de formulario que contiene el cuerpo de la solicitud para intentar iniciar sesión correctamente |
---|---|
Sintaxis: |
AuthFormBody fieldname |
Defecto: | httpd_body |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormMethod
La directiva especifica el nombre de un campo HTML que, si está presente, contendrá el método de la solicitud que se enviará en caso de que el inicio de sesión sea exitoso.
Al completar el formulario con los campos descritos por AuthFormMethod
, AuthFormMimetype
y AuthFormBody
, un sitio web puede volver a intentar una solicitud que puede haber sido interrumpida por la pantalla de inicio de sesión o por un tiempo de espera de la sesión.
Directiva AuthFormDisableNoStore
Descripción: | Deshabilite el encabezado sin almacenamiento de CacheControl en la página de inicio de sesión |
---|---|
Sintaxis: |
AuthFormDisableNoStore On|Off |
Defecto: |
AuthFormDisableNoStore Off |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormDisableNoStore
bandera deshabilita el envío de un Cache-Control no-store
encabezado con la página de error 401 que se devuelve cuando el usuario aún no ha iniciado sesión. El propósito del encabezado es dificultar la ecmascript
aplicación para intentar volver a enviar el formulario de inicio de sesión y revelar el nombre de usuario y la contraseña a la aplicación backend. Desactive bajo su propio riesgo.
Directiva AuthFormFakeBasicAuth
Descripción: | Falsificar una autenticación básica encabezamiento |
---|---|
Sintaxis: |
AuthFormFakeBasicAuth On|Off |
Defecto: |
AuthFormFakeBasicAuth Off |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormFakeBasicAuth
bandera determina si un Basic Authentication
El encabezado se agregará a los encabezados de la solicitud. Esto se puede utilizar para exponer el nombre de usuario y la contraseña a una aplicación subyacente, sin que la aplicación subyacente tenga que saber cómo se logró el inicio de sesión.
Directiva AuthFormLocation
Descripción: | El nombre de un campo de formulario que contiene una URL a la que redirigir al iniciar sesión correctamente |
---|---|
Sintaxis: |
AuthFormLocation fieldname |
Defecto: | httpd_location |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormLocation
La directiva especifica el nombre de un campo HTML que, si está presente, contendrá una URL a la que redirigir el navegador si el inicio de sesión se realiza correctamente.
Directiva AuthFormLoginRequiredLocation
Descripción: | La URL de la página a la que se redirigirá en caso de que sea necesario iniciar sesión |
---|---|
Sintaxis: |
AuthFormLoginRequiredLocation url |
Defecto: | none |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior. El uso del analizador de expresiones se ha agregado en 2.4.4. |
los AuthFormLoginRequiredLocation
La directiva especifica la URL a la que se redireccionará si el usuario no está autorizado para ver una página. El valor se analiza mediante el analizador ap_expr antes de enviarse al cliente. De forma predeterminada, si un usuario no está autorizado para ver una página, el código de respuesta HTTP HTTP_UNAUTHORIZED
será devuelto con la página especificada por el ErrorDocument
directiva. Esta directiva anula este valor predeterminado.
Utilice esta directiva si tiene una página de inicio de sesión dedicada a la que redirigir a los usuarios.
AuthFormLoginSuccessDirectiva de ubicación
Descripción: | La URL de la página a la que se redirigirá en caso de que el inicio de sesión sea exitoso |
---|---|
Sintaxis: |
AuthFormLoginSuccessLocation url |
Defecto: | none |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior. El uso del analizador de expresiones se ha agregado en 2.4.4. |
los AuthFormLoginSuccessLocation
La directiva especifica la URL a la que se redireccionará si el usuario ha iniciado sesión correctamente. El valor se analiza mediante el analizador ap_expr antes de enviarse al cliente. Esta directiva se puede anular si se ha definido un campo de formulario que contiene otra URL utilizando el AuthFormLocation
directiva.
Utilice esta directiva si tiene una URL de inicio de sesión dedicada y no ha incrustado la página de destino en el formulario de inicio de sesión.
Directiva AuthFormLogoutLocation
Descripción: | La URL a la que se redireccionará después de que un usuario haya cerrado la sesión. |
---|---|
Sintaxis: |
AuthFormLogoutLocation uri |
Defecto: | none |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior. El uso del analizador de expresiones se ha agregado en 2.4.4. |
los AuthFormLogoutLocation
La directiva especifica la URL de una página en el servidor a la que redirigir si el usuario intenta cerrar la sesión. El valor se analiza mediante el analizador ap_expr antes de enviarse al cliente.
Cuando se accede a un URI servido por el controlador form-logout-handler
, la página especificada por esta directiva se mostrará al usuario final. Por ejemplo:
Ejemplo
<Location "/logout"> SetHandler form-logout-handler AuthFormLogoutLocation "http://example.com/loggedout.html" Session on #... </Location>
Un intento de acceder al URI /cerrar sesión/ resultará en que el usuario se desconecte, y la página /loggedout.html será mostrado. Asegúrese de que la página logout.html no está protegida por contraseña, de lo contrario, la página no se mostrará.
Directiva AuthFormMethod
Descripción: | El nombre de un campo de formulario que contiene el método de la solicitud para intentar iniciar sesión correctamente |
---|---|
Sintaxis: |
AuthFormMethod fieldname |
Defecto: | httpd_method |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormMethod
La directiva especifica el nombre de un campo HTML que, si está presente, contendrá el método de la solicitud que se enviará en caso de que el inicio de sesión sea exitoso.
Al completar el formulario con los campos descritos por AuthFormMethod
, AuthFormMimetype
y AuthFormBody
, un sitio web puede volver a intentar una solicitud que puede haber sido interrumpida por la pantalla de inicio de sesión o por un tiempo de espera de la sesión.
Directiva AuthFormMimetype
Descripción: | El nombre de un campo de formulario que contiene el tipo MIME del cuerpo de la solicitud para intentar iniciar sesión correctamente. |
---|---|
Sintaxis: |
AuthFormMimetype fieldname |
Defecto: | httpd_mimetype |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormMethod
La directiva especifica el nombre de un campo HTML que, si está presente, contendrá el tipo MIME de la solicitud que se enviará en caso de que el inicio de sesión sea exitoso.
Al completar el formulario con los campos descritos por AuthFormMethod
, AuthFormMimetype
y AuthFormBody
, un sitio web puede volver a intentar una solicitud que puede haber sido interrumpida por la pantalla de inicio de sesión o por un tiempo de espera de la sesión.
Directiva AuthFormPassword
Descripción: | El nombre de un campo de formulario que contiene la contraseña de inicio de sesión |
---|---|
Sintaxis: |
AuthFormPassword fieldname |
Defecto: | httpd_password |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormPassword
La directiva especifica el nombre de un campo HTML que, si está presente, contendrá la contraseña que se utilizará para iniciar sesión.
Directiva AuthFormProvider
Descripción: | Establece los proveedores de autenticación para esta ubicación |
---|---|
Sintaxis: |
AuthFormProvider provider-name [provider-name] ... |
Defecto: |
AuthFormProvider file |
Contexto: | directorio, .htaccess |
Anular: | AuthConfig |
Estado: | Base |
Módulo: | mod_auth_form |
los AuthFormProvider
La directiva establece qué proveedor se utiliza para autenticar a los usuarios para esta ubicación. El valor por defecto file
proveedor es implementado por el mod_authn_file
módulo. Asegúrese de que el módulo de proveedor elegido esté presente en el servidor.
Ejemplo
<Location "/secure"> AuthType form AuthName "private area" AuthFormProvider dbm AuthDBMType SDBM AuthDBMUserFile "/www/etc/dbmpasswd" Require valid-user #... </Location>
Los proveedores son implementados por mod_authn_dbm
, mod_authn_file
, mod_authn_dbd
, mod_authnz_ldap
y mod_authn_socache
.
Directiva AuthFormSitePassphrase
Descripción: | Omita las comprobaciones de autenticación para sitios de alto tráfico |
---|---|
Sintaxis: |
AuthFormSitePassphrase secret |
Defecto: | none |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormSitePassphrase
La directiva especifica una frase de contraseña que, si está presente en la sesión del usuario, hace que Apache httpd omita las comprobaciones de autenticación para la URL dada. Se puede utilizar en sitios web de alto tráfico para reducir la carga inducida en la infraestructura de autenticación.
La frase de contraseña se puede insertar en una sesión de usuario agregando esta directiva a la configuración de la controlador de inicio de sesión de formulario. los controlador de inicio de sesión de formulario en sí mismo siempre ejecutará las comprobaciones de autenticación, independientemente de si se especifica una frase de contraseña o no.
Advertencia
Si la sesión se expone al usuario mediante el uso de mod_session_cookie
, y la sesión no está protegida con mod_session_crypto
, la frase de contraseña está abierta a una posible exposición a través de un ataque de diccionario. Independientemente de cómo esté configurada la sesión, asegúrese de que esta directiva no se use dentro de los espacios de URL donde los datos privados del usuario podrían estar expuestos o se pueden realizar transacciones confidenciales. Utilizar bajo su propia responsabilidad.
Directiva AuthFormSize
Descripción: | El tamaño más grande del formulario en bytes que se analizará para los detalles de inicio de sesión |
---|---|
Sintaxis: |
AuthFormSize size |
Defecto: | 8192 |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormSize
La directiva especifica el tamaño máximo del cuerpo de la solicitud que se analizará para encontrar el formulario de inicio de sesión.
Si llega una solicitud de inicio de sesión que excede este tamaño, toda la solicitud se cancelará con el código de respuesta HTTP. HTTP_REQUEST_TOO_LARGE
.
Si ha llenado el formulario con los campos descritos por AuthFormMethod
, AuthFormMimetype
y AuthFormBody
, probablemente desee establecer este campo en un tamaño similar al KeptBodySize
directiva.
Directiva AuthFormUsername
Descripción: | El nombre de un campo de formulario que lleva el nombre de usuario de inicio de sesión |
---|---|
Sintaxis: |
AuthFormUsername fieldname |
Defecto: | httpd_username |
Contexto: | directorio |
Estado: | Base |
Módulo: | mod_auth_form |
Compatibilidad: | Disponible en Apache HTTP Server 2.3.0 y posterior |
los AuthFormUsername
La directiva especifica el nombre de un campo HTML que, si está presente, contendrá el nombre de usuario que se utilizará para iniciar sesión.