Rails には、セッション ハッシュ用のストレージ メカニズムがいくつか用意されています。最も重要なのはActiveRecord::SessionStore
とActionDispatch::Session::CookieStore
です。
Rails がセッション ハッシュとセッション ID を保存する場所など、多数のセッション ストレージがあります。ほとんどの実際のアプリケーションActiveRecord::SessionStore
は、パフォーマンスとメンテナンスの理由から、ファイル ストレージよりも (またはその派生の 1 つ) を選択します。ActiveRecord::SessionStore
セッション ID とハッシュをデータベース テーブルに保持し、リクエストごとにハッシュを保存して取得します。
Rails 2 では、新しいデフォルトのセッション ストレージCookieStore
. CookieStore
セッション ハッシュをクライアント側の Cookie に直接保存します。サーバーは Cookie からセッション ハッシュを取得し、セッション ID を不要にします。これにより、アプリケーションの速度が大幅に向上しますが、物議を醸すストレージ オプションであり、セキュリティへの影響について考える必要があります。
Cookie は、4kB の厳密なサイズ制限を意味します。前に説明したように、とにかくセッションに大量のデータを保存するべきではないので、これは問題ありません。現在のユーザーのデータベース ID をセッションに保存することは、通常は問題ありません。クライアントは、セッションに保存されたすべてのものを見ることができます。これは、クリア テキスト (実際には Base64 でエンコードされているため、暗号化されていない) で保存されるためです。したがって、もちろん、ここにシークレットを保存する必要はありません。セッション ハッシュの改ざんを防ぐために、サーバー側のシークレットを使用してセッションからダイジェストが計算され、Cookie の末尾に挿入されます。つまり、このストレージのセキュリティは、このシークレット (および、まだ侵害されていない SHA512 にデフォルト設定されるダイジェスト アルゴリズム) に依存することを意味します。したがって、些細な秘密、つまり辞書の単語、または 30 文字未満の単語は使用しないでください。