注销基本 HTTP 身份验证

信息安全 验证 http 阿帕奇
2021-08-28 12:46:49

https://stackoverflow.com/questions/233507/how-to-log-out-user-from-web-site-using-basic-authentication中所见,有一些有趣的方法可以从 Basic HTTP 注销用户验证。

目前我正在发送一个 HTTP 401 这样做:

获取注销.php

<?php
header('HTTP/1.1 401 Unauthorized', true, 401);
exit;

在随后的请求中,浏览器会使用凭据模式提示我。单击取消后,我会收到一个 HTTP 401 响应,这是预期的结果。

这是一个内部应用程序并使用 HTTPS

这有任何潜在的安全问题吗?我正在使用 LDAP 模块(因此是基本 HTTP 身份验证)。Apache 是否以任何方式“缓存”凭据,或者是否使用来自用户代理的每个请求验证凭据?我还需要做些什么来确保没有来自用户代理的有效凭据的请求始终收到 HTTP 401 响应?

1个回答

浏览器的每个请求都会传输基本身份验证凭据。因此,为什么您传统上不能在不关闭浏览器的情况下“注销”。

这种方法之所以有效,是因为浏览器是无状态的。通常,当它发送 GET/POST/HEAD 请求时,它会收到 200 OK 响应。如果收到 401 响应,它将提示用户输入凭据并使用这些凭据重新提交请求。如果这些凭据错误,服务器将再次发送 401 响应,并且浏览器再次提示。因此,当浏览器收到 401 响应时,它会假定在之前的请求中发送的凭据是错误的,并会再次询问。

重要的是要记住,您依靠客户端行为来清除凭据并要求用户提供新凭据,因此始终存在与您无法控制的事物相关的风险。