<-
Apache HTTP 服务器 2.4 > Apache模块mod_auth_form

Apache模块mod_auth_form

描述:表格认证
状态:基础
模块标识符:auth_form_module
源文件:mod_auth_form.c
兼容性:在Apache 2.3及更高版本中可用

摘要

警告

表单身份验证取决于这些mod_session 模块,并且这些模块使用HTTP cookie,因此可能成为跨站点脚本攻击的受害者,或者向客户端公开潜在的私人信息。在服务器上启用会话功能之前,请确保已考虑到相关风险。

该模块允许使用HTML登录表单来通过在给定提供者中查找用户来限制访问。HTML表单比其他表单需要更多的配置,但是HTML登录表单可以为最终用户提供更友好的体验。

由提供HTTP基本认证,由提供 mod_auth_basicHTTP摘要认证mod_auth_digest。该模块应与至少一个认证模块(例如)mod_authn_file和一个授权模块(例如)组合mod_authz_user

成功验证用户身份后,该用户的登录详细信息将存储在由提供的会话中mod_session

支持Apache!

主题

指令

错误修正清单

也可以看看

最佳

基本配置

为了保护与特定的URL mod_auth_form,你需要决定你将存储你的会话,你需要决定你会用什么方法来验证。在这个简单的示例中,登录详细信息将基于存储在会话中 mod_session_cookie,并使用尝试对文件进行身份验证mod_authn_file。如果认证失败,则用户将被重定向到表单登录页面。

基本例子

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

设置为值形式时,伪指令AuthType将启用mod_auth_form身份验证。指令和 指定应根据所选文件检查用户名和密码。AuthFormProviderAuthUserFile

指令SessionSessionCookieName 会话存储在浏览器的HTTP cookie中。有关配置会话的不同选项的更多信息,请阅读的文档 mod_session

您可以选择添加 SessionCryptoPassphrase来创建加密的会话Cookie。这需要mod_session_crypto加载附加模块。

在上面的简单示例中,URL已受到的保护 mod_auth_form,但是尚未为用户提供输入其用户名和密码的机会。这样做的选项包括为此目的提供专用的独立登录页面,或内联提供登录页面。

最佳

独立登录

该登录表单可以作为独立页面托管,也可以在同一页面上内联提供。

当将登录配置为独立页面时,不成功的身份验证尝试应使用AuthFormLoginRequiredLocation 指令重定向到网站为此目的而创建的登录表单。通常,此登录页面将包含HTML表单,要求用户提供其使用名和密码。

登录表单示例

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

进行实际登录的部分由form-login-handler处理。表单的操作应指向此处理程序,该处理程序在Apache httpd中进行如下配置:

表单登录处理程序示例

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

AuthFormLoginRequiredLocation指令指定的URL 通常将指向一个页面,向用户解释其登录尝试失败,因此应再次尝试。该AuthFormLoginSuccessLocation 指令规定了用户应成功登录后重定向的URL。

或者,可以将成功重定向用户的URL嵌入在登录表单中,如下例所示。结果,可以将相同的表单登录处理程序重新用于网站的不同区域。

带有位置的示例登录表单

<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>
最佳

内联登录

警告

在某些情况下,存在使用内联登录配置的登录表单可能会多次提交的风险,从而向在其下运行的应用程序显示登录凭据。管理员必须确保适当保护基础应用程序,以防止滥用。如有疑问,请使用独立登录配置。

作为网站专用登录页面的替代方法,可以配置mod_auth_form为内联身份验证用户,而无需重定向到另一个页面。这允许在登录尝试期间保留当前页面的状态。在有时间限制的会话生效并且会话在用户请求中间超时的情况下,这很有用。可以在适当位置重新认证用户,然后他们可以从中断的地方继续进行。

如果未经身份验证的用户尝试访问mod_auth_form未由AuthFormLoginRequiredLocation伪指令配置的受保护页面 ,则 HTTP_UNAUTHORIZED状态代码会返回到浏览器,以指示该用户无权查看该页面。

要配置内联身份验证,管理员将使用包含登录表单的自定义错误文档覆盖HTTP_UNAUTHORIZED状态代码返回的错误文档,如下所示:

基本内联示例

AuthFormProvider file
ErrorDocument 401 "/login.shtml"
AuthUserFile "conf/passwd"
AuthType form
AuthName realm
AuthFormLoginRequiredLocation "http://example.com/login.html"
Session On
SessionCookieName session path=/

错误文档页面应包含具有空action属性的登录表单,如以下示例所示。这样可以将表单提交到原始受保护的URL,而页面不必知道该URL是什么。

内联登录表单示例

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

最终用户填写了登录详细信息后,该表单将向原始受密码保护的URL发出HTTP POST请求。 mod_auth_form会拦截此POST请求,如果在用户名和密码的HTML字段中找到了HTML字段,则该用户将登录,原始的受密码保护的URL将作为GET请求返回给用户。

最佳

内联登录并保存身体

上述内联登录技术的局限性在于,如果HTML表单POST导致请求了身份验证或重新身份验证,则浏览器发布的原始表单的内容将丢失。根据网站的功能,这可能给最终用户带来极大的不便。

mod_auth_form通过允许将原始请求的方法和主体嵌入登录表单来解决此问题。如果身份验证成功,则Apache httpd将重试原始方法和主体,并保留原始请求的状态。

要启用正文保存,请按照以下示例在登录表单中添加三个其他字段。

身体保护的例子

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

如何将原始请求的方法,模仿类型和主体嵌入登录表单中,这取决于网站中使用的平台和技术。

一种选择是将mod_include模块与 KeptBodySize指令一起使用,以及合适的CGI脚本将变量嵌入表格中。

另一种选择是使用CGI脚本或其他动态技术来呈现登录表单。

CGI范例

AuthFormProvider file
ErrorDocument 401 "/cgi-bin/login.cgi"
...
最佳

注销

要使用户能够注销特定的会话,请配置要由form-logout-handler处理的页面。任何尝试访问此URL的操作都会导致用户名和密码从当前会话中删除,从而有效地注销用户。

通过设置 AuthFormLogoutLocation指令,可以指定成功注销后将浏览器重定向到的URL。该URL可能会向用户说明他们已经注销,并为用户提供了重新登录的选项。

基本注销示例

SetHandler form-logout-handler
AuthName realm
AuthFormLogoutLocation "http://example.com/loggedout.html"
Session On
SessionCookieName session path=/

请注意,注销用户并不会删除会话。它只是从会话中删除用户名和密码。如果这导致会话为空,则最终结果将是删除该会话,但这不能保证。如果要保证删除会话,请将SessionMaxAge伪指令设置 为一个较小的值,例如1(将伪指令设置为零将意味着没有会话期限限制)。

基本会话到期示例

SetHandler form-logout-handler
AuthFormLogoutLocation "http://example.com/loggedout.html"
Session On
SessionMaxAge 1
SessionCookieName session path=/
最佳

用户名和密码

请注意,表单提交涉及URLEncoding表单数据:在这种情况下,用户名和密码。因此,您应该选择避免在表单提交中使用URL编码的字符的用户名和密码,否则可能会得到意外的结果。

最佳

AuthForm权威 指令

描述:设置是否将授权和身份验证传递给较低级别​​的模块
句法:AuthFormAuthoritative On|Off
默认:AuthFormAuthoritative On
内容:目录.htaccess
覆写:验证配置
状态:基础
模块:mod_auth_form

通常,列出的每个授权模块AuthFormProvider都会尝试验证用户,如果在任何提供程序中都找不到该用户,则将拒绝访问。如果没有用户ID或 与提供的用户ID匹配的规则,则将AuthFormAuthoritative指令显式设置 为Off允许将身份验证和授权传递给其他基于非提供商的模块。仅当与未使用 伪指令配置的第三方模块结合使用时,才应该这样做。使用此类模块时,处理顺序在模块的源代码中确定,并且不可配置。mod_auth_formAuthFormProvider

最佳

AuthFormBody 指令

描述:表单域的名称,其中包含尝试成功登录的请求的主体
句法:AuthFormBody fieldname
默认:AuthFormBody httpd_body
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormBody指令指定HTML字段的名称,如果存在,它将包含登录成功后要提交的请求的正文。

通过用描述字段填充形式 AuthFormMethodAuthFormMimetype并且 AuthFormBody,一个网站可以重试可能已经被登录屏幕中断,或由会话超时的请求。

最佳

AuthFormDisableNoStore 指令

描述:在登录页面上禁用CacheControl无存储头
句法:AuthFormDisableNoStore On|Off
默认:AuthFormDisableNoStore Off
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormDisableNoStore标志禁止发送Cache-Control no-store标头,并在用户尚未登录时返回错误401页面。标头的目的是使ecmascript应用程序难以尝试重新提交登录表单并显示用户名和密码到后端应用程序。禁用后果自负。

最佳

AuthFormFakeBasicAuth 指令

描述:伪造基本身份验证标头
句法:AuthFormFakeBasicAuth On|Off
默认:AuthFormFakeBasicAuth Off
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormFakeBasicAuth标志确定是否将Basic Authentication标头添加到请求标头。这可以用于将用户名和密码公开给基础应用程序,而基础应用程序不必知道如何实现登录。

最佳

AuthFormLocation 指令

描述:成功登录后带有URL重定向到的表单字段的名称
句法:AuthFormLocation fieldname
默认:AuthFormLocation httpd_location
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormLocation指令指定HTML字段的名称(如果存在),该字段将包含URL,以将浏览器重定向到登录成功的位置。

最佳

AuthFormLoginRequiredLocation 指令

描述:需要登录后要重定向到的页面的URL
句法:AuthFormLoginRequiredLocation url
默认:none
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用。表达式分析器的使用已在2.4.4中添加。

AuthFormLoginRequiredLocation指令指定了如果用户无权查看页面则重定向到的URL。该值在发送给客户端之前使用ap_expr解析器进行解析。默认情况下,如果用户无权查看页面,则HTTP响应代码 HTTP_UNAUTHORIZED将与ErrorDocument伪指令指定的页面一起返回 。该指令将覆盖此默认值。

如果您有专用的登录页面可将用户重定向到,请使用此伪指令。

最佳

AuthFormLoginSuccessLocation 指令

描述:登录成功后要重定向到的页面的URL
句法:AuthFormLoginSuccessLocation url
默认:none
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用。表达式分析器的使用已在2.4.4中添加。

AuthFormLoginSuccessLocation指令指定的URL重定向到如果用户已成功登录。该值在发送给客户端之前使用ap_expr解析器进行解析。如果使用该AuthFormLocation指令定义了包含另一个URL的表单字段,则可以覆盖该指令。

如果您有专用的登录URL,并且尚未将目标页面嵌入登录表单,请使用此伪指令。

最佳

AuthFormLogoutLocation 指令

描述:用户注销后重定向到的URL
句法:AuthFormLogoutLocation uri
默认:none
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用。表达式分析器的使用已在2.4.4中添加。

AuthFormLogoutLocation指令指定服务器上的网页的URL重定向到如果用户试图注销。该值在发送给客户端之前使用ap_expr解析器进行解析。

当访问由处理程序提供的URI时form-logout-handler,此指令指定的页面将显示给最终用户。例如:

<Location "/logout">
    SetHandler form-logout-handler
    AuthFormLogoutLocation "http://example.com/loggedout.html"
    Session on
    #...
</Location>

尝试访问URI / logout /将会导致用户被注销,并显示/loggedout.html页面。确保页面 loginout.html没有受密码保护,否则将不会显示该页面。

最佳

AuthFormMethod 指令

描述:表单域的名称,其中包含尝试成功登录的请求方法
句法:AuthFormMethod fieldname
默认:AuthFormMethod httpd_method
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormMethod指令指定的HTML字段,如果存在,将包含提交应该登录成功请求的方法的名称。

通过用描述字段填充形式 AuthFormMethodAuthFormMimetype并且 AuthFormBody,一个网站可以重试可能已经被登录屏幕中断,或由会话超时的请求。

最佳

AuthFormMimetype 指令

描述:表单字段的名称,其中包含尝试成功登录的请求主体的模仿类型
句法:AuthFormMimetype fieldname
默认:AuthFormMimetype httpd_mimetype
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormMimetype指令指定的HTML字段构成,其中,如果存在的话,将包含请求的MIME类型提交的名称应该登录成功。

通过用描述字段填充形式 AuthFormMethodAuthFormMimetype并且 AuthFormBody,一个网站可以重试可能已经被登录屏幕中断,或由会话超时的请求。

最佳

AuthFormPassword 指令

描述:带有登录密码的表单字段的名称
句法:AuthFormPassword fieldname
默认:AuthFormPassword httpd_password
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormPassword指令指定要使用的HTML字段构成,其中,如果存在的话,将包含密码名登录。

最佳

AuthFormProvider 指令

描述:设置此位置的身份验证提供程序
句法:AuthFormProvider provider-name [provider-name] ...
默认:AuthFormProvider file
内容:目录.htaccess
覆写:验证配置
状态:基础
模块:mod_auth_form

AuthFormProvider指令设置使用哪个提供程序来认证此位置的用户。默认file提供程序由mod_authn_file模块实现。确保服务器中存在所选的提供程序模块。

<Location "/secure">
    AuthType form
    AuthName "private area"
    AuthFormProvider  dbm
    AuthDBMType        SDBM
    AuthDBMUserFile    "/www/etc/dbmpasswd"
    Require            valid-user
    #...
</Location>

供应商通过实施mod_authn_dbmmod_authn_filemod_authn_dbdmod_authnz_ldapmod_authn_socache

最佳

AuthFormSitePassphrase 指令

描述:绕过高流量站点的身份验证检查
句法:AuthFormSitePassphrase secret
默认:none
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormSitePassphrase指令指定一个密码,如果存在于用户会话,使阿帕奇的httpd到对于给定的URL旁路认证检查。它可以用于高流量的网站上,以减轻身份验证基础结构带来的负担。

通过将此指令添加到form-login-handler的配置中,可以将密码短语插入用户会话。该表单登录处理程序 本身将始终运行认证检查,无论是否指定了一个密码与否。

警告

如果使用来向用户公开会话 mod_session_cookie,并且该会话不受的保护 mod_session_crypto,则密码短语可能会通过字典攻击而暴露给潜在用户。无论如何配置会话,请确保不要在可能暴露私有用户数据或可以进行敏感事务的URL空间中使用此伪指令。使用风险自负。

最佳

AuthFormSize 指令

描述:表单的最大大小(以字节为单位),将解析为登录详细信息
句法:AuthFormSize size
默认:AuthFormSize 8192
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormSize指令指定将被解析,找到登录表单的请求主体的最大尺寸。

如果到达的登录请求超过此大小,则整个请求将被HTTP响应代码中止HTTP_REQUEST_TOO_LARGE

如果您使用AuthFormMethodAuthFormMimetype和 描述的字段填充了表单 AuthFormBody,则可能需要将此字段设置为与KeptBodySize 指令相似的大小。

最佳

AuthFormUsername 指令

描述:带有登录用户名的表单字段的名称
句法:AuthFormUsername fieldname
默认:AuthFormUsername httpd_username
内容:目录
状态:基础
模块:mod_auth_form
兼容性:在Apache HTTP Server 2.3.0和更高版本中可用

AuthFormUsername指令指定HTML字段的名称,如果存在,则将包含用于登录的用户名。

可用语言: zh  |  fr 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。