2

我已经安装了 Apache HTTPD 服务器及其mod_authn_otp用于身份验证的模块。一切正常。

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

登出

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

实际上,在实践中,服务器有一种方法可以“注销”用户:返回 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 错误页面。请帮忙。

提前致谢!

4

2 回答 2

0

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

JS hacks可以通过发送一个验证失败的 ajax 请求,然后发送一个带有成功但实际验证失败的临时凭证的请求来绕过它。

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

于 2013-09-25T11:17:42.403 回答
0

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

能够在最长逗留时间内从不同浏览器使用相同一次性密码的攻击者仍然能够进入。

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

于 2013-09-19T02:38:54.653 回答