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

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

ただいまの
回答率

88.80%

Session_StoreをクライアントのCookieにするかサーバ側のインメモリDBなどにするかでは、何が違うのですか?

解決済

回答 3

投稿

  • 評価
  • クリップ 2
  • VIEW 628

kyotoinrn

score 23

前提・実現したいこと

どちらの方法でも何らかの情報(多分Session_id)をクライアントのCookieに残さないと
ステートフルにはならないと思うんですが、その場合、セキュリティリスク的にはどのようにして
差が生まれてくるのでしょうか?

インメモリDB等サーバ側に残した方が安全と言われているのは知っていますが、
結局Session_idを元にしてコネクションを確立するので、それが盗聴されてしまえば一緒だと思えて
しまうのですが、どうなんでしょうか?

発生している問題・エラーメッセージ

` エラーメッセージ

### 該当のソースコード

ここに言語名を入力 ソースコード ```

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

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

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+3

CookieStoreの現実的な問題は、「ログアウトができない」ということですね。
見かけ上は、クッキーを削除することによりログアウトしたように見せることができますが、サーバーサイドでセッション情報を管理するログアウト処理とは異なります。

まず、サーバーサイドでのセッション管理の場合ですが、ファイルなりDBなりインメモリDBなりに保存されたセッション情報そのものを削除すると、仮にセッションIDがあってもセッション情報は復元できません。
一方、CookieStoreはクッキーそのものに情報が入っているので、「サーバー側で削除」することは当然できないわけです。
なので、万一クッキーがなんらかの方法で入手されてしまったら、それを無効化する手段がありません。この場合、CookieStoreの暗号を解読しなくても、単にブラウザにセットするだけでセッションを再現できます。緩和策としては、セッション情報の中に有効期限を入れておけば、有効期限の後はアプリケーション的に無効にすることはできます。

CookieStoreの暗号が解読されてしまったら論外の結果になるわけですが、解読されない場合でも、セッションの無効化ができないのがつらい、ということになります。

ただし、そもそもクッキーが漏洩したらいずれの方法でもセッションハイジャックされるわけなので、すごく重大な問題とまでは言えません。現に、CookieStoreも使われているわけですしね。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/14 13:35

    要は最後の二文が、僕の疑問点ということですか?セッション情報をクライアントにおいていようが、サーバにおいていようが、クッキーが漏洩したらSession_idが盗られてしまうという

    キャンセル

  • 2019/05/14 13:39

    また、サーバ側に置いていた場合で、セッションIDだけのクッキーが漏れた場合、漏れたことが分かっていないとサーバ側から削除することも難しいと思うのですが、どうなんでしょうか…?

    キャンセル

  • 2019/05/14 14:12

    たとえば、利用者が明示的にログアウトボタンを押す習慣がある人の場合、サーバー上にセッション情報を保持する場合はログアウト操作後はセッション情報を悪用する手段はありませんが、CookieStoreの場合は、すでにクッキーが漏洩した場合はログアウト操作後も悪用できる、という違いがあります。
    ただ、上記は明確な違いではあるものの、(1)クッキーが漏洩すること自体が問題であり滅多にあることはではない、(2)明示的にログアウト操作をする人も少ないと予想される、ことから、すごく大きな差ではない、ということです。

    キャンセル

  • 2019/05/14 15:59

    分かりました、ありがとうございました!

    キャンセル

+1

結局Session_idを元にしてコネクションを確立するので、それが盗聴されてしまえば一緒だと思えて
しまうのですが

いえ、全く違います。Cookieはクライアント側で保存されるものですので、セッションデータまでCookieに書き込むと「Cookieだけでデータを解読してセッションの中身を知ることができる危険がある」「不適切なCookieをクライアント側で生成することで、適切でないセッションデータを作成する」などの行為ができてしまいます。

セッションの中身をサーバサイドで持つ場合、セッションデータがCookieとしてクライアントに送られることはありませんので、上に述べたような事態は起こりません。

(セキュリティとは別件ですが、Cookieはリクエストのたびに送受信されますので、リクエストの通信量がその分増加する、容量制限が厳しい、などの問題もあります)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

Session_idはドラえもんのポケットを開けるための鍵です。
ポケットの中身はドラえもんが管理していてドラえもんしか分かりません。鍵を持っている人も分かりません。ポケットの中には銀行の通帳や印鑑が入っているかもしれないけど、それもドラえもんしか分かりません。

Session_idの有効期限がアクセスする都度3分延長する仕様だとしましょう。
もしSession_idを盗んでも3分以内にドラえもんのところにたどり着いて銀行の通帳や印鑑を取り出さなければいけません。
しかし!
クライアント側に保存するものがSession_idだけではなくすべての情報だとすると!もうそこには通帳も印鑑もあるって事になる!盗まれたら大変だ!
助けてードラえもーん!

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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