web-dev-qa-db-ja.com

Railsセッションの現在のプラクティス

Rails and sessions?デフォルトのセッションタイプはRails 3はまだCookieStoreですよね?SqlSessionStoreをしばらく使用しましたそしてそれはうまく機能しましたが、CookieStoreを支持してそれをやめるかもしれません。

塩漬けの情報であっても、機密情報にCookieStoreを使用することはまだ良い考えではありませんか?

82
Lukas

Cookieベースのデフォルトの代わりに、セッションにデータベースを使用します。デフォルトは、機密性の高い情報の保存には使用しないでください

セッションテーブルを作成します

rake db:sessions:create

移行を実行する

rake db:migrate

ActiveRecordを使用してセッションも管理するようにRailsに伝えてください。

Rails 3

config/initializers/session_store.rb:

Rails.application.config.session_store :active_record_store

Rails 2

config/environment.rb:

config.action_controller.session_store = :active_record_store
102
Volcanic

CookieはデフォルトでRails 4で暗号化されます

In Rails 4、 CookieStore Cookieはデフォルトで暗号化および署名されます:

secret_tokenのみが設定されている場合、Cookieは署名されますが、暗号化されません。つまり、ユーザーはアプリの秘密キーを知らない限りuser_idを変更できませんが、user_idを簡単に読み取ることができます。これはRails 3アプリのデフォルトでした。

secret_key_baseが設定されている場合、Cookieは暗号化されます。これは、暗号化されたCookieをユーザーが変更したり読み取ったりすることができないという点で、署名付きCookieよりも一歩進んでいます。これはRails 4。

secret_tokensecret_key_baseの両方を設定している場合、Cookieは暗号化され、Rails 3パス。

アクティブレコードセッションストアは、Rails 4

この回答 は、Rails 4。より長い仕事:

  • rake db:sessions:create

  • Rails generate session_migration

これは this answer で指摘されました。 Active Record Session Storeが非推奨になった理由は、 このブログ投稿 に記載されているように、アプリケーションにアクセスするユーザーが多数いると、データベースの読み取り/書き込みが適切にスケーリングされないためです。

... Active Recordセッションストアの1つの大きな問題は、スケーラブルではないことです。データベースに不必要な負荷をかけます。アプリケーションが大量のトラフィックを受信すると、セッションデータベーステーブルは読み取り/書き込み操作で継続的に攻撃されます。

Rails 4の時点で、Active Recordセッションストアはコアフレームワークから削除され、廃止されました。

Active Record Session Storeを引き続き使用する場合は、 gemとして引き続き利用可能 です。

現在のRailsセッションのベストプラクティス

Ruby on Railsセッションの最新のベストプラクティスについては、 Ruby on Railsセキュリティガイド

50
user456814

どのプラットフォームでもCookieベースのセッションを処理する方法に変更はないと思います。サーバーの制御を超えるもの(Cookie、フォームポストなど)には懐疑的です。これがWeb開発の一般的な原則です。

暗号化に関しては、その面で何かが変わったかどうかはわかりません。

Cookieストアで注意すべきことは、データ量の制限と、このデータがすべてのリクエストで送信されるという落とし穴です。データベースストアはIDのみを転送し、データはサーバー上に存在します。

9
Tilendor

FWIW、Rails 3.1は実行を提案します

Rails generate session_migration

ただし、これにより、まったく同じ移行が生成されます

rake db:sessions:create
4
Nate Milbee

Railsデフォルトは私にはかなり良いようです-CookieStoreは高速で、ほとんどのユースケースをカバーするはずです。4kbに制限され、データはユーザーに表示されますが、 Rails方法は、整数IDや基本的な文字列値などにのみセッションを使用することです。セッションでオブジェクトや機密性の高い情報を保存しようとしている場合、おそらく間違っています。

2
Yarin