Apache mod_authn_otp和HTTP 401错误

时间:2013-09-11 10:52:14

标签: apache http basic-authentication

我已经安装了Apache HTTPD Server及其mod_authn_otp模块进行身份验证。一切正常。

然而,有一个小问题。我无法“结束”用户会话。在阅读文件后,我发现了如何做到这一点。 mod_authn_otp文件说:

  

注销

     

由于HTTP身份验证基本上是无状态的,因此没有实际的   “登录”过程。每个HTTP请求都需要自己的身份验证。   同样,也没有“退出”过程。换句话说,有   用户或服务器无法强制“注销”用户   浏览器,因为浏览器永远不会“登录”。使用mod_authn_otp,   “退出”恰好在达到最大逗留时间时发生。

     

实际上,在实践中有一种方法可以让服务器“注销”   user:返回401 Unauthorized HTTP错误代码。这将导致   浏览器“忘记”它曾经存在的用户名/密码对   使用并提示新的。但是,这必须在   脚本级别(例如,通过PHP脚本)。此外,这只是“退出”   那个用户的浏览器。攻击者能够使用相同的一次性   在最长逗留时间内来自不同浏览器的密码会   仍然能够进入。

因此,我只是写了一个小的bash脚本来返回HTTP错误,如下所示:

#/bin/bash
echo -e 'HTTP/1.0 401 Unauthorized'
echo -e 'WWW-Authenticate: Basic realm=\"mod_authn_otp\"’

但是,当我调用此脚本时,它会再次弹出身份验证提示,即使我提供了正确的详细信息,身份验证也会失败。此外,HTTP错误页面未使用此脚本重定向。请帮忙。

提前致谢!

2 个答案:

答案 0 :(得分:0)

  

只有当我关闭浏览器并重新打开时,我才能通过弹出菜单再次验证自己

     

能够在最长逗留时间内使用来自其他浏览器的相同一次性密码的攻击者仍然可以进入。

尝试发送错误的凭据,而不是发送401请求:

答案 1 :(得分:0)

当客户端输入正确的凭据时,您的脚本会返回401,使客户端将其解释为不正确。所以它按照您的设计工作,而不是您想要的。

JS hacks通过发送失败身份验证的ajax请求然后使用临时凭证成功但将使您的实际身份验证失败的请求来绕过它。

否则你必须通过用户培训绕过它。告诉用户关闭浏览器的所有实例或在注销页面上使用“取消”,然后提供指向主页的链接以重新登录。