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

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

新規登録して質問してみよう
ただいま回答率
85.48%
セキュリティー

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

Ruby on Rails 4

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

Q&A

解決済

2回答

21486閲覧

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

komachi

総合スコア94

セキュリティー

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

Ruby on Rails 4

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

7グッド

6クリップ

投稿2016/09/26 08:38

編集2016/09/26 16:04

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が暗号化されているとしても、それをそっくりそのまま盗んでしまえば、それを使って本物のユーザになりすませてしまうと思うのですが。。。

kamedd, ex025, tatsuya6502, mit0223, yuukive, maisumakun👍を押しています

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

クリップした質問は、後からいつでもMYページで確認できます。

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/26 16:10

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

2016/09/26 17:24

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

回答2

0

ベストアンサー

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

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

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

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

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

投稿2016/09/26 21:47

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

komachi

2016/09/27 13:31

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

2016/10/05 02:38 編集

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

2016/10/05 02:52

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

0

Railsチュートリアル運営チームの安川です!直後の文で補足されているように、セッションハイジャックの可能性は常に付きまといます。

ただし今述べたことは、sessionメソッドで作成した「一時セッション」にしか該当しません。cookiesメソッドで作成した「永続的セッション」ではそこまで断言はできません。永続的なcookiesには、セッションハイジャックという攻撃を受ける可能性が常につきまといます。ユーザーのブラウザ上に保存される情報については、第9章でもう少し注意深く扱うことにします。
https://railstutorial.jp/chapters/basic_login?version=5.1#code-log_in_function

では sessions のときには暗号化せずに、cookies のときは暗号化しているのか (どっちみちセッションハイジャックされるとダメなら無駄では??) の理由についてですが、こちらはセキュリティの専門家である @ockeghem さんが Quora で回答した次の解説が分かりやすいかなと思います。

Q. セッションを暗号化することになんの意味がありますか?暗号化したとしても、その暗号化したものを使ってリクエストしてしまえばサーバー側で復号してくれるので通ってしまうと思います。
https://jp.quora.com/sesshon-wo-angou-ka-suru-kotoni-nan-no-imi-ga-arima-suka-angou-ka-shita-toshite-mo-sono-angou-ka-shita-mono-wo-shi-tte-rikuesuto-shi-te-shima-e-ba-sa-ba-gawa-de-fukugou-shi-te-kureru-node-toori-tte-shimau-to-omoi

なお、上記で回答されている徳丸先生には、Railsチュートリアルを題材にしたセキュリティ入門についても解説していただきました。登壇時の内容およびスライド資料などは下記の記事にまとめています。ご参考になれば幸いです。

Railsエンジニアのためのウェブセキュリティ入門に参加
https://yasslab.jp/ja/news/secure-programming-with-rails

Tokumaru-san no Slide

技術の変化に伴ってRailsチュートリアル自体も更新を加える必要もあるため、現在はチームでコンテンツの更新に日々励んでいます!他にも何か気になる点がありましたら @RailsTutorialJP までご連絡いただけると嬉しいです (>人< )✨

投稿2020/02/06 12:53

編集2022/11/13 10:05
yasulab

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問