質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

92.59%

解決済 Cookieは暗号化されていれば盗まれてもいいの?

  • Ruby on Rails 4

    1373questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • セキュリティー

    206questions

    このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

2016/09/26 17:38 投稿

2016/09/27 01:04 編集

komachi score 50

  • 1

    回答

  • 評価

  • 1896

    view

Cookieは暗号化されていれば盗まれても良いのでしょうか?
というのも、現在学習中のRuby on Rails4において、参考にしている定番サイト(Rails tutorial)の「第8章ログイン、ログアウト」において、そのような旨の記述があったためです。
http://railstutorial.jp/chapters/log_in_log_out?version=4.2#sec-a_working_log_in_method

問題は、次の一節です。

sessionメソッドで作成した一時cookiesは自動的に暗号化され、リスト8.12のコードは保護されます。そしてここが重要なのですが、攻撃者がたとえこの情報をcookiesから盗み出すことができたとしても、それを使って本物のユーザーとしてログインすることはできないのです。

なぜ、「攻撃者がたとえこの情報をcookiesから盗み出すことができたとしても、それを使って本物のユーザーとしてログインすることはできない」と言えるのかがわかりません。私の認識では、暗号化された一時cookies(user_idが含まれています)をサーバが受取り、それを復号化して認証を行っているのですから、たとえcookieが暗号化されているとしても、それをそっくりそのまま盗んでしまえば、それを使って本物のユーザになりすませてしまうと思うのですが。。。

情報の追加・修正の依頼をする(2)

2016/09/27 01:10

参照している文章に「それに続けて「ただし今述べたことは、sessionメソッドで作成した「一時セッション」にしか該当しません」と書いてあるので、「一時セッション」では、毎回、暗号鍵が変わるようなことをしていませんか?

2016/09/27 02:24

アドバイスありがとうございます。このsessionメソッドはRailsに実装されているものですので、暗号鍵が変わっているかどうかはコードを見ないとわかりません。また、習熟度が低いためコードを見ても判断がつかないかもしれません。

表示エリアを広げる

閉じる

気になる質問をクリップする

クリップした質問に回答があった場合に通知・メールを受け取ることができます。

クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

良い質問の評価を上げる

以下のような質問は評価を上げましょう。

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

質問の評価を上げたことを取り消します

この機能は開放されていません

評価を下げる条件を満たしてません

評価を下げる理由を選択してください

上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

質問の評価を下げる機能の利用条件

この機能を利用するためには、以下の事項を行う必要があります。

質問の評価を下げたことを取り消します

回答(全1件)

ベストアンサー

回答の評価を上げる

以下のような回答は評価を上げましょう。

  • 正しい回答
  • わかりやすい回答
  • ためになる回答

評価が高い回答ほどページの上位に表示されます。

9

この機能は開放されていません

評価を下げる条件を満たしてません

私の認識では、暗号化された一時cookies(user_idが含まれています)をサーバが受取り、それを復号化して認証を行っているのですから、たとえcookieが暗号化されているとしても、それをそっくりそのまま盗んでしまえば、それを使って本物のユーザになりすませてしまうと思うのですが。。。

これは、komachiさんが正しいでしょう。教材の説明が間違っていると思います。cookie が盗まれれば、それが一時Cookie であってもセッションハイジャックは可能です。

おそらく、暗号化されているので、Cookieからは userid さえもわからないということ、 一時 Cookie なら、ブラウザを閉じれば値が破棄されるので、永続 Cookie よりは安全ということが言いたかったのでしょう。

Railsのセッション管理方法についてでは、CookieStore によるセッション管理は「クライアント側にセッション内容を保存するという仕様上、様々な問題を抱えていますので、利用しないほうがいいかと思います。」と書かれており、私もそのとおりだと思います。
他のフレームワークでは、セッション情報を暗号化してCookie に詰めてブラウザに保存したりしません。 Cookieは乱数で発生し、サーバ側のテーブルでセッション情報を対応させるのが普通です(Rails では ActiveRecordSessionStore ならそうなっている)。

この教材の続く章も見ましたいが、はっきり言って、セッション管理については、教材として悪いでしょう。セッションハイジャックについては、IPAの解説がわかりやすいと思います。

2016/09/27 06:47 投稿

コメント(3)

2016/09/27 22:31

ご回答ありがとうございます。ご提示いただいたIPAの解説を参考にします。また、railsではActiveRecordSessionStoreの使用を検討します。

2016/10/05 11:38 編集

ちょっとよくわからないのですが Cookie がどう生成されていようが(セッションデータではなくセッションキーを保持する形であろうが) Cookie 盗まれたらセッションハイジャックされることに変わりない気がするのですが、そういったことまで防ぐ仕組みが ActiveRecordSessionStore にはあるのでしょうか?

2016/10/05 11:52

いえ、 Cookie が盗まれれば、ActiveRecordSessionStoreでもセッションハイジャックされます。すみません、ActiveRecordSessionStore の話は蛇足です。komachi さんもそこは理解していただいていると思います。
セッションハイジャックされにくくする方法としては、送信元IPをセッションテーブルに保存してチェックするとかがありますが、Cookie が盗まれること自身があってはならないことです。XSS 攻撃を防御したり、 http のアクセスに対して Cookie を漏らしたりしないように注意したりするほうが大事です。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

92.59%

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails 4

    1373questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • セキュリティー

    206questions

    このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

閲覧数の多いセキュリティーの質問

関連した質問

  • 受付中

    回答:2

    /

    クリップ:0

    ログインシステムの仕組み

    ログインシステムの仕組みが知りたいです 現在rubyでsinatraでapiサーバーを作りシングル

  • 解決済

    回答:2

    /

    クリップ:0

    Rails テスト rspec

    Ruby on Rails のテストについてですが 生成されたtopページのhtmlの中身の文

  • 受付中

    回答:2

    /

    クリップ:0

    railsでのスタイルシートの追加の仕方

    前提・実現したいこと railsにてアプリケーションを作成し、 rails generate c

  • 解決済

    回答:1

    /

    クリップ:3

    Rails API認証方式について

    クライアントからAPIを呼び出す際の認証方式について教えてください。 管理画面からdeviseでロ

メールアドレスで登録

利用規約、及び 個人情報の取り扱いに関する要項をご確認のうえ同意いただける場合は「同意して登録」ボタンをクリックしてください。

SNSアカウントで登録

  • Facebook
  • Twitter
  • Google
  • Github
  • Hatena

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る