javascript - 当无法以编程方式复制的浏览器关闭时会发生什么?

标签 javascript php apache authentication

许多身份验证服务(PHP_AUTH、Apache Basic Auth、SSO 服务)要求关闭用户的浏览器才能正确/安全地终止其身份验证 session 。

我知道其中一些服务是“无状态的”,这意味着它们不以“ session ”的概念运行。为什么没有一种方法可以像关闭浏览器时那样简单地告诉浏览器清空身份验证缓存或清除 cookie?我见过许多针对不同服务强制“注销”的黑客攻击,但为什么这些首先是必要的?

当浏览器关闭且无法通过 PHP(强制服务器终止 session )或 JavaScript(强制客户端终止浏览器,就像关闭时看起来的那样)复制时,会发生什么?这些功能不存在的原因是什么(我只能假设它们会造成某种安全漏洞),特别是在客户端?

编辑:至于我问这个问题的原因:很多时候这些是最容易设置的服务(如果给定组织具有带有现有身份验证 UI 的单点登录服务,则没有理由编写自己的服务) 。然而,强制用户关闭整个浏览器只是为了任意注销单个服务似乎是笨拙和过时的事情,我试图了解哪些因素决定它必须是这种方式。

最佳答案

公共(public)服务公告:强制用户关闭浏览器以注销是一种不良的用户模型,它会阻止用户注销,从而降低有效的安全性。

不碍事...

我怀疑幕后发生的事情是 session ID 维护在 HTTP session cookie 中。 。这些 cookie 具有当前浏览器 session 的生命周期。因此,当浏览器关闭时,用户将失去浏览器与服务器上的 session 之间的关联。服务器 session 实际上并未终止,它只是悬空。想必超时就会结束。

所以注销完全是通过浏览器行为来实现的。该应用程序无需执行任何特殊操作。

除了前面提到的可怕的用户模型之外,该解决方案还在用户完成 session 后让 session 保持事件状态。直播 session 会消耗资源,并且有机会被劫持直至超时。鉴于这些缺点,我怀疑只有在 session 成本低廉时才使用此策略。

关于javascript - 当无法以编程方式复制的浏览器关闭时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29856590/

相关文章:

Apache tomcat 8.5 用户不工作

apache - 更改时间格式以获取 Apache 日志文件中的毫秒数

javascript - 执行回退时 window.jQuery 和 if (typeof jQuery == "undefined") 之间有什么区别?

PHP 安全写入文本文件?

javascript - 如何将单元素数组作为单列/列表返回?

javascript - 来自 Chart.js 的堆叠组栏 : Can I give each stack group a unique color?

php - mysql 按列名响应

Linux 手动打开端口以及这样做的正当理由

javascript - 如何在 React Js 中为 react 表的 <tr> 添加类?

javascript - Google 可视化 Barformat 选项