Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache mod_authn_otp和HTTP 401错误_Apache_Http_Basic Authentication - Fatal编程技术网

Apache mod_authn_otp和HTTP 401错误

Apache mod_authn_otp和HTTP 401错误,apache,http,basic-authentication,Apache,Http,Basic Authentication,我已经安装了apachehttpd服务器及其mod_authn_otp模块进行身份验证。一切正常 然而,有一个小问题。我无法结束用户会话。在阅读这些文件时,我发现了如何做到这一点。文件上说: 注销 由于HTTP身份验证本质上是无状态的,因此没有实际的 登录过程。每个HTTP请求都需要自己的身份验证。 同样,也没有注销过程。换句话说,有 用户或服务器无法强制注销用户的帐户 浏览器,因为浏览器从未登录。使用mod_authn_otp, 注销正好在达到最大延迟时间时发生 实际上,在实践中,有一种方法可

我已经安装了apachehttpd服务器及其mod_authn_otp模块进行身份验证。一切正常

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

注销

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

实际上,在实践中,有一种方法可以让服务器注销 用户:返回401个未经授权的HTTP错误代码。这将导致 浏览器会忘记它所使用的用户名/密码对 使用并提示输入一个新的。然而,这将不得不在 脚本级别,例如,通过PHP脚本。而且,这只会注销 该用户的浏览器。能够使用同一个一次性密码的攻击者 在最长逗留时间内从其他浏览器输入密码 还是可以进去

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

#/bin/bash
echo -e 'HTTP/1.0 401 Unauthorized'
echo -e 'WWW-Authenticate: Basic realm=\"mod_authn_otp\"’
但是,当我调用此脚本时,它会再次弹出身份验证提示,即使我提供了正确的详细信息,身份验证也会失败。此外,HTTP错误页未使用此脚本重定向。请帮忙

提前谢谢

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

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

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


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

要解决这个问题,需要发送一个身份验证失败的ajax请求,然后发送一个带有临时凭据的请求,该请求成功了,但实际身份验证将失败


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

为什么需要结束会话?您的逗留时间是否>0?如果是这样,他们建议无论如何都使用SSL加密会话,而在给定基本身份验证方案的情况下,您似乎没有这样做。如果linger=0,则OTP仅有效一次,因此会话已经结束。问题是,一旦我在弹出窗口中使用用户名和密码验证自己,我就会进入“欢迎”页面。这里我有一个注销按钮,所以它忘记了我的详细信息。上面的脚本通过忘记我的详细信息并再次显示身份验证弹出框来实现这个注销按钮。我已将我的逗留时间设置为零。但我得到的错误是:即使我输入了正确的用户详细信息,pop也不会对我进行身份验证。只有当我关闭浏览器并重新打开时,我才能再次通过弹出菜单进行身份验证!401不是坏凭证吗?401是服务器响应的一部分。凭据是客户端请求的一部分。你好,Paul,你能告诉我如何更改脚本吗?我确实看到了您发送的链接,但仍然无法理解如何更改此链接。谢谢