6

私はRails 3.2.3をセッションにactive_record_storeとともに使用しています。

私が理解しているのは、Rails の CSRF トークンはセッションに保存され、reset_session が呼び出されるか、何らかの理由でセッションが破棄されない限り、リセットされるべきではないということです。

ただし、リモート フォームが ajax 経由で読み込まれる特定の場所では、そのページの META タグで指定されたものとは異なる認証トークンが含まれます。したがって、そのフォームの送信時に無効なトークン エラーと reset_session が発生します。

def form_authenticity_token
  session[:_csrf_token] ||= SecureRandom.base64(32)
end

session[:_csrf_token] が破棄されて新しいトークンが作成されるのはなぜですか?

4

1 に答える 1

4

たくさんの狩りをした後、ついにこの問題を理解しました。モデルオブジェクトをセッションに直接保存していましたが、サイズ制限が65KBのアクティブレコードセッションストアを使用した後でも、セッションが4kb後に切り捨てられたため、CRSFトークンが消去され、新しいトークンが生成されました。うん!失敗...特に理由がない限り、モデルオブジェクトをセッションに保存しないでください。とにかく、アクティブなレコードセッションストアを持った後でも、セッションに大きなオブジェクトを保存できなかった理由を理解しようとしています。

于 2012-11-21T01:45:10.500 に答える