12

認証にDeviseを使用した後、ユーザーがログアウトした後、セッション変数が保持されるというセキュリティホールがあることがわかりました。これにより、誰でも戻るボタンを押して、ログインしているユーザーの前の画面にアクセスできます。

私はこれらの投稿を見ました Num1Num 2 Num 3

これらの行をapplication_controllerに追加しました

before_filter :set_no_cache
def set_no_cache
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

_form.html.erbで、これを上部に追加しました

<%if user_signed_in? %>
<%=link_to "Sign Out",  destroy_user_session_path, :method => :delete %><br/>
<%= form_for(@listing) do |f| %>
<% if @listing.errors.any? %>
...........

次に、Firefox、Chrome、Safariでアプリケーションをテストしました。

FirefoxとChromeは、ログアウトして戻るボタンを押すとユーザーの前の画面が表示されないという点で問題ありませんでしたが、SafariとOperaでは、安全でない動作が続いています。このコードは効果がありません。

これを修正する方法について何か提案はありますか?

ありがとう

4

3 に答える 3

13

私は同じ問題に直面し、良い解決策を見つけました、そして私はそれをブログに書きました

http://www.fordevs.com/2011/10/how-to-prevent-browser-from-caching-a-page-in-rails.html

'no-cache'を追加するには、次の行をapplication_controller.rbファイルに追加します。

before_filter :set_no_cache

と機能

def set_no_cache
    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
于 2013-03-22T08:06:02.333 に答える
1

まず、キャッシュに関する問題については、HTTPキャッシングに関するMarkNottinghamのガイドを使用してください

Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0

これを試して。

于 2012-06-08T19:04:08.320 に答える
0

私のアプリケーションコントローラーでこれを行うことは、開発に非常に効果的であることがわかりました。

after_filter  :expire_for_development

protected

def expire_for_development
  expires_now if Rails.env.development?
end
于 2014-02-15T21:27:52.717 に答える