【问题标题】:How to clear browser cache after user logout to prevent access to private info via 'Back' button如何在用户注销后清除浏览器缓存以防止通过“返回”按钮访问私人信息
【发布时间】:2011-05-06 10:31:22
【问题描述】:

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

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

我在 Rails 3 和 Devise 上,顺便说一句,虽然这个问题似乎会出现任何框架或登录机制。

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

期待您的建议。

【问题讨论】:

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


    【解决方案1】:

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

    代码

    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
    

    【讨论】:

      【解决方案2】:

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

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

      • 积极缓存的良好候选者是应用程序和公共页面中使用的 CSS 和图像。
      • 适合无缓存的候选对象是登录后可访问的任何内容(即,如果您存储的图像只能由其所有者访问,则不应缓存它,如果您有一个针对经过身份验证的用户的 Ajax 请求,那么不应缓存 XML)。

      【讨论】:

        【解决方案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)>
        

        希望这会有所帮助。

        【讨论】:

        • 感谢您的信息。这将解决安全问题,但是关闭缓存后,性能会受到影响,不是吗?用户必须在每次页面加载时下载所有静态资产。这似乎是一个很难解决的问题。关于在这种情况下如何平衡安全性和性能的任何巧妙想法?
        猜你喜欢
        • 2013-04-05
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 2010-11-02
        • 1970-01-01
        • 1970-01-01
        • 2016-02-06
        • 1970-01-01
        相关资源
        最近更新 更多