如何在用户注销后清除浏览器缓存,以防止通过“后退”按钮访问私人信息

时间:2010-11-07 23:29:37

标签: ruby-on-rails authentication http-headers devise browser-cache

用户退出后,如果他们点击后退按钮,他们可以在退出之前返回到他们所在的最后一页。

我正在处理的应用程序通常用于公共计算机(例如图书馆或计算机实验室),我想阻止用户查看以前用户会话中的任何内容。

我正在使用Rails 3和Devise,顺便说一下,虽然看起来这个问题会出现任何框架或登录机制。

解决方案是使用标头/元标记来禁用浏览器缓存吗?有人知道解决这个问题的宝石或教程吗?

期待您的建议。

3 个答案:

答案 0 :(得分:6)

在应用程序控制器中使用以下代码..它适用于我。 希望这会帮助你。 谢谢!!

before_filter :set_cache_buster

def set_cache_buster
   response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
   response.headers["Pragma"] = "no-cache"
   response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end

答案 1 :(得分:4)

在Rails上,您可以轻松地设置放置在public文件夹中的所有内容,并使用激进的缓存,然后挑选其他可以安全缓存的内容,例如公共“关于”页面。

您应该设置Cache-Control: no-cache以防止浏览器缓存包含敏感信息的HTML页面,XML,JSON(基本上只有正确登录才能访问的内容),并为静态资产(如css和css)设置更积极的缓存图像。

  • 积极缓存的良好候选者是应用程序和公共页面中使用的css和图像。
  • 无缓存的良好候选者是登录后可访问的任何内容(即,如果您要存储的图像只能由tis所有者访问,则不应缓存它,如果您对autenticated用户有Ajax请求,那么不应该缓存XML。

答案 2 :(得分:3)

是的,您必须使用http标头指示浏览器不要缓存页面。来自OWASP的page ()包含有关如何执行此操作的信息。

根据上面的文章,您可以设置以下标头来指示浏览器不要缓存页面:

HTTP/1.1:
Cache-Control: no-cache

HTTP/1.0:
Pragma: no-cache
Expires: <past date or illegal value (e.g., 0)>

希望这有帮助。