我可能是错的,但我认为在注销后关闭浏览器窗口的请求很常见,尽管完全不清楚关闭浏览器窗口失败的风险是什么(假设浏览器完全是最新的)和为什么更重要的是浏览器无法在不关闭浏览器窗口的情况下减轻威胁。最后,关闭浏览器是否比关闭浏览器中的窗口/选项卡更好?
为什么退出网站后需要关闭浏览器窗口?
经过一番搜索,似乎一些银行在攻击允许用户或恶意网站在用户注销后重用持久性 cookie 的银行后给出此建议,据称是因为其他浏览器选项卡在相关网站上保持打开状态所以浏览器还没有清除cookies。
可能存在此类漏洞的原因表明以下两种安全机制中的任何一种都失败了:
- 浏览器没有在站点之间实施严格的同源策略,允许第三方站点访问您的银行站点的 cookie(或者对于共享计算机,您打开了一个选项卡并且该选项卡被不受信任的第三方用户使用)
- 银行网站没有或错误地使您的 cookie 无效,因为它已将您注销
就我而言,我已经可以得出结论,这个“建议”是一些网站用来拒绝自己对用户承担责任的安全剧院。显然,这是非常错误的,因为它鼓励用户浪费精力和时间来应用愚蠢的措施,而不是实际解决发生的问题。
根据OWASP ,网站在注销用户时有两个职责:
- 使服务器端的用户状态无效,这将防止任何客户端查询被重放或精心制作
- 使浏览器上的会话 cookie(以及包含通常只有在网站上通过身份验证的用户才能访问的信息的 cookie,对于 Web 应用程序)无效,以确保没有信息可供客户端浏览器的下一个用户使用
- 网站甚至可以更进一步,确保在用户注销时刷新设备上所有打开的选项卡。这甚至可以消除用户确保他们关闭所有标签的需要。
因此,在一个网站开发人员尊重他们职责的世界里,不应该有遵循这种愚蠢建议的依据。如果网站不这样做,他们很可能会因为没有采取必要的手段来保护用户的个人数据而承担责任。
如果...,您应该关闭您的网络浏览器(以避免私人信息泄露)
有人可能会在您访问计算机后访问您的计算机
HTTP 响应(敏感信息)未正确设置 Cache-Control 标头
例如,访问 yourbank.com,查看您的帐户。单击注销。单击后退按钮。你看到你的账户信息了吗?在某些站点上你会,在其他站点上你不会,这取决于那个缓存头。
访问 yourbank.com,查看您的帐户。记下网址。单击注销。关闭浏览器(所有窗口/进程)。使用注明的 URL 再次打开浏览器。你看到你的账户信息了吗?你不应该。
正确的 HTTP 标头是:
Cache-Control: no-store, must-revalidate
对于用户可能在多个选项卡上打开同一个站点(但只注销一个)的情况,您可以使用以下标题使浏览器重新加载页面(从而显示登录屏幕)
Refresh: N
其中 N 是用户会话到期前的秒数 + 一个小缓冲区。它在一段时间内仍然很脆弱,但不会永远存在。
此建议通常针对单点登录 (SSO) 解决方案。这适用于用户只登录一次的系统集合。用户的身份验证由称为身份提供者的中央系统处理。登录后,将与请求的系统和身份提供者本身建立两个会话。当访问一个新系统时,与身份提供者的现有会话用于创建与这个新系统的会话,而无需再次请求凭据。
实现单点注销 (SLO) 是一个复杂的问题,因为您必须使每个访问的系统的会话无效。SLO 通常仅通过给出关闭浏览器的建议来实现,从而使所有会话凭据无效。
当网站使用基本或 Windows 身份验证时,通常会使用此技术,因为没有办法“注销”。身份验证机制不是使用 cookie,而是作为 Authorization 标头添加到发送到网站的每个请求中。对于基本身份验证,它将是 base64 编码字符串中的用户名/密码,对于 Windows 身份验证,它包含与 NTLM 或 Kerberos 身份验证有关的值。因此,关闭浏览器是最快和最安全的补救措施。
这与使用表单身份验证形成对比,后者可以通过简单地使 cookie 过期并从应用程序中删除会话来关闭会话。