質問: Cookieは暗号化されていれば盗まれても良いのでしょうか? というのも、現在学習中のRuby on Rails4において、参考にしている定番サイト(Rails tutorial)の「第8章ログイン、ログアウト」において、そのような旨の記述があったためです。 問題は、次の一節です。 > > sessionメソッドで作成した一時cookiesは自動的に暗号化され、リスト8.12のコードは保護されます。そしてここが重要なのですが、攻撃者がたとえこの情報をcookiesから盗み出すことができたとしても、それを使って本物のユーザーとしてログインすることはできないのです。 > > > なぜ、「攻撃者がたとえこの情報をcookiesから盗み出すことができたとしても、それを使って本物のユーザーとしてログインすることはできない」と言えるのかがわかりません。私の認識では、暗号化された一時cookies(user_idが含まれています)をサーバが受取り、それを復号化して認証を行っているのですから、たとえcookieが暗号化されているとしても、それをそっくりそのまま盗んでしまえば、それを使って本物のユーザになりすませてしまうと思うのですが。。。
回答: > > 私の認識では、暗号化された一時cookies(user_idが含まれています)をサーバが受取り、それを復号化して認証を行っているのですから、たとえcookieが暗号化されているとしても、それをそっくりそのまま盗んでしまえば、それを使って本物のユーザになりすませてしまうと思うのですが。。。 > > > これは、komachiさんが正しいでしょう。教材の説明が間違っていると思います。cookie が盗まれれば、それが一時Cookie であってもセッションハイジャックは可能です。 おそらく、暗号化されているので、Cookieからは userid さえもわからないということ、 一時 Cookie なら、ブラウザを閉じれば値が破棄されるので、永続 Cookie よりは安全ということが言いたかったのでしょう。 Railsのセッション管理方法についてでは、CookieStore によるセッション管理は「クライアント側にセッション内容を保存するという仕様上、様々な問題を抱えていますので、利用しないほうがいいかと思います。」と書かれており、私もそのとおりだと思います。 他のフレームワークでは、セッション情報を暗号化してCookie に詰めてブラウザに保存したりしません。 Cookieは乱数で発生し、サーバ側のテーブルでセッション情報を対応させるのが普通です(Rails では ActiveRecordSessionStore ならそうなっている)。 この教材の続く章も見ましたいが、はっきり言って、セッション管理については、教材として悪いでしょう。セッションハイジャックについては、IPAの解説がわかりやすいと思います。