HTTP基本身份验证凭据会一直存储到浏览器关闭,但是有没有办法在浏览器关闭之前删除这些凭据呢?
我读到过一篇关于trick with HTTP 401 status code的文章,但它看起来像是work not properly (参见注释来回答)。也许是mechanism trac uses is the solution。
是否可以使用JavaScript删除凭据?或者使用JavaScript和status 401技巧的组合?
发布于 2015-05-19 00:27:34
对1月的答案进行扩展,并更新owyongsk的答案:
下面是一些示例jquery java-script代码,它会导致浏览器向您试图保护的页面发送一个虚假的登录请求,这在所有测试的浏览器中都会导致缓存的凭据被删除,然后将用户重定向到一个未受保护的页面。
出错时的alert()可能应该更改为其他值。
//Submits an invalid authentication header, causing the user to be 'logged out'
function logout() {
$.ajax({
type: "GET",
url: "PUT_YOUR_PROTECTED_URL_HERE",
dataType: 'json',
async: true,
username: "some_username_that_doesn't_exist",
password: "any_stupid_password",
data: '{ "comment" }'
})
//In our case, we WANT to get access denied, so a success would be a failure.
.done(function(){
alert('Error!')
})
//Likewise, a failure *usually* means we succeeded.
//set window.location to redirect the user to wherever you want them to go
.fail(function(){
window.location = "/";
});
}
然后,就像让注销链接调用logout()函数一样简单,而且它似乎对用户来说是无缝工作的,尽管从技术上讲这仍然是一项黑客工作。
发布于 2013-06-08 00:46:01
你可以用最新的Chrome和Firefox尝试一下目前正在运行的黑客攻击。在您的服务器上创建一个"/logout“页面,该页面只接受特定的凭证,例如用户名: false,密码: false。然后使用下面的AJAX请求,您可以将用户发送到该页面。
$("#logout").click(function(e){
e.preventDefault();
var request = new XMLHttpRequest();
request.open("get", "/logout", false, "false", "false");
request.send();
window.location.replace("WHEREVER YOU WANT YOUR LOGGED OUT USER TO GO");
});
发生的情况是,错误的用户名和密码从有效的XMLHttpRequest缓存,而不是从当前用户的凭据缓存,当用户尝试登录任何页面时,它将使用缓存的假凭据,如果身份验证失败,它将要求用户输入另一个凭据。希望这能有所帮助!
发布于 2011-07-30 13:21:15
刚刚完成了一个对我来说运行良好的实现:在服务器上,我评估会话、用户名和密码,因此我跟踪这些信息,登录算法如下:
1.检查用户和密码是否不为空,否则返回401。
2.检查是否已在登录用户列表中注册了会话,如果没有,则检查用户和密码是否有效,如果有效,则将会话id保存在列表中,然后返回401。我将解释这一步骤:如果会话id不同,则会发生以下三种情况之一: a)用户正在打开另一个窗口。b)用户会话已结束,即用户已注销。c)会话由于处于非活动状态而过期。但是只要用户凭证有效,我们就希望保存会话,但返回401要求输入密码一次,如果不保存会话,则用户永远无法登录,因为我们的列表中没有新的会话id。
3.检查用户凭证是否正确,如果正确,则保存会话信息并继续服务页面,否则返回401。
因此,当用户请求注销页面时,当web浏览器再次显示登录对话框时,我要注销用户的唯一方法是关闭服务器上的会话。
我在想,当我写这篇文章时,必须有一个步骤,程序会检查用户是否已经登录,以避免模拟,也许我可以为每个用户保存多个会话id,以允许多个会话,嗯,我希望您对此发表意见。
希望你明白这一点,如果你看到任何安全缺陷,请发表评论;)
https://stackoverflow.com/questions/4163122
复制相似问题