在用户注销后防止浏览器的后退按钮显示安全数据的最简单方法是啥?

Posted

技术标签:

【中文标题】在用户注销后防止浏览器的后退按钮显示安全数据的最简单方法是啥?【英文标题】:easiest way to prevent the back button of your browser from showing secure data after a user logs out?在用户注销后防止浏览器的后退按钮显示安全数据的最简单方法是什么? 【发布时间】:2010-09-17 16:21:53 【问题描述】:

在带有登录和保护数据的普通网络应用程序中,一旦用户注销,有什么简单的方法可以保护这些数据并防止通过使用浏览器的后退按钮被看到?

【问题讨论】:

这是一个很好的问题,目前还没有好的跨浏览器答案。 【参考方案1】:

Here's a useful browser caching guide.

您想设置缓存控制和过期日期标头(设置过去的日期),例如

 Cache-Control: no-cache
 Expires: Fri, 31 Dec 1998 12:00:00 GMT

【讨论】:

【参考方案2】:

缓存控制标头(Expires、Cache-Control、ETag)通常会阻止页面缓存,迫使浏览器请求新副本,此时您可以检查会话状态。但有时为了“性能”而忽略它们。

有两种 javascript 方法可以帮助您:

离开页面时使用页面的退出事件(表单的 onSubmit 或其他页面的 onUnload)清除页面内容。 在页面之间移动时使用 document.location.replace() 而不是普通链接,以免在浏览器历史记录中留下用户可以返回的痕迹。

不过,这两者都可能对可用性产生非常可怕的影响。

【讨论】:

【参考方案3】:

没有完美的解决方案

虽然对此有一些非常合理的解决方案(缓存控制标头、javascript 等),但您需要意识到,一旦您向客户端发送了某些内容,它就不受您的控制。 您不能保证客户会按照您希望的方式处理数据

例如:

浏览器中可能存在错误 浏览器可能允许用户关闭缓存控制 用户可能在禁用 javascript 的情况下运行

对不起:(

【讨论】:

【参考方案4】:

设置缓存标头以完全禁止页面的任何缓存。这应该可以防止页面本身在用户点击后退按钮时显示,除非他们已登录。

【讨论】:

【参考方案5】:

我在 IE 和 Firefox 上试过这个 VB.NET 代码。

Response.Cache.SetAllowResponseInBrowserHistory(False) Response.Cache.SetCacheability(HttpCacheability.NoCache) Response.Cache.SetNoStore() Response.Expires = 0

这可以解决问题,但我同意其他无法保证客户端浏览器行为的答案。

【讨论】:

【参考方案6】:

取决于您的登录解决方案(SSO - Windows Live / OpenID vs homegrown,登录信息的存储位置等)...由于“返回”通常不会再次请求页面,我建议清除表单JavaScript(加载)。在服务器端,您可以填充它们(Page_Load)。注销时清除会话和视图状态。

【讨论】:

以上是关于在用户注销后防止浏览器的后退按钮显示安全数据的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

servlet会话,注销后,按下浏览器的后退按钮时,再次显示安全页面[重复]

在 Grails 中注销后,浏览器后退按钮显示上一页

提交表单后防止重新加载页面。 (没有阿贾克斯)

注销后的 CodeIgniter 后退按钮

支付失败后防止用户使用 SaaS 应用程序的最佳方法是啥

使用浏览器后退按钮进行 ASP.NET 身份验证登录和注销