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_basicy 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.