许多身份验证服务(PHP_AUTH,Apache Basic Auth,SSO服务)要求关闭用户的浏览器以正确/安全地终止其身份验证会话。
我知道其中一些服务是“无国籍的”和#34;这意味着他们不会对“会话”的概念进行操作。为什么没有办法简单地告诉浏览器清空身份验证缓存或清除cookie,就像它关闭时一样?我已经看到了许多针对不同服务的黑客攻击以及#34;注销"但是为什么这些是必要的呢?
当浏览器关闭时无法通过PHP复制(强制服务器终止会话)或JavaScript(迫使浏览器终止客户端)会发生什么情况,因为它似乎会在它发生时终止关闭)?这些功能不存在的原因是什么(我只能假设它们会产生某种安全漏洞),尤其是在客户端?
编辑:至于为什么我要问这个问题:很多时候这些是最容易设置的服务(如果给定的组织具有现有身份验证UI的单点登录服务,那么就没有了写自己的理由)。然而,迫使用户关闭他们的整个浏览器只是为了任意注销单个服务似乎是笨拙和陈旧的东西,我试图了解哪些因素决定了它必须这样。答案 0 :(得分:1)
公共服务公告:强制用户关闭浏览器以注销是一种糟糕的用户模式,会阻止用户注销,从而降低有效的安全性。
那不在...
我怀疑幕后发生的事情是会话ID保持在HTTP session cookie。这些cookie具有当前浏览器会话的生命周期。因此,当浏览器关闭时,用户将丢失其浏览器与服务器上的会话之间的关联。服务器会话实际上没有终止,它只是晃来晃去。据推测它会在它超时时结束。
因此注销完全通过浏览器行为实现。该应用程序不需要做任何特别的事情。
除了前面提到的可怕的用户模型之外,该解决方案在用户完成之后使会话保持活动状态。实时会话将消耗资源,并有可能被劫持直到超时。鉴于这些缺点,我怀疑这种策略仅在会议以便宜的方式实施时使用。