📝

[セキュリティ基礎]cookieとsessionについて

2023/04/13に公開

セキュリティを学ぼう

まず!!!Webサイトにログインするためには、
ブラウザとサーバー間でやり取りされる情報が必要
だ。
これらの情報は、CookieとSessionを使って実現される。
=> Webサイトにアクセスする時に使用しているHTTPはステートレスなため、
リクエストとレスポンスの1往復のやりとりが完結された処理とみなされ、
複数の処理を関連付ける仕組みがなく、このCookieとSession2つが必要
になる。

HTTP"はステートレスだということ

"HTTP"は状態を持たないステートレスなプロトコル。
= リクエストとレスポンスの1往復のやりとりが完結された処理とみなされ、
複数の処理を関連付ける仕組みがない

ステートフルとステートレスとは

ステートフルとステートレスは、プログラムやプロトコルの振る舞いを表す言葉

  • ステートフルとは:
    プログラムやプロトコルが通信の状態を保持していることを意味する。
    ex. 電話の通話中における会話のように、通信の途中でやり取りされた情報が維持され、
    それが次の通信に影響を与える。

  • ステートレスとは
    通信の状態を保持しないことを意味する。
    通信の途中でやり取りされた情報は維持されず、通信が終了するとそれまでの情報はリセットされる。
    ex. WebサイトのHTTPプロトコルのように、クライアントとサーバー間で情報をやり取りするたびに、
    通信の状態がリセットされることがある。

それぞれの利点・欠点

ステートフル ステートレス
利点 - 通信の状態を保持することで、より効率的な通信が可能になることがある。
- 保持された情報を利用することで、繰り返しのログインや認証を省略できる場合がある。
- 通信の状態を保持しないため、セキュリティ上のリスクが低い
- スケーラビリティに優れ、多数のユーザーを処理することができる
欠点 - セッション管理に複雑な仕組みが必要になる。
- セッション情報が失われると、ユーザーエクスペリエンスが低下することがある。
- ロードバランサーのような複数のサーバーを使用する場合、セッション情報を共有するための仕組みが必要になる。
- 通信の状態を保持しないため、前回の情報が利用できないことがある。
- 通信ごとに情報をやり取りするため、通信量が増えることがある。

ステートフルは、通信の途中でやり取りされた情報を保持することで、
より効率的な通信が可能になる。
一方、ステートレスは、通信の状態を保持しないため、
セキュリティ上のリスクが低く、スケーラビリティに優れている。

cookieとは

  • Webサイトがブラウザに保存する小さなデータの塊
  • httpには状態を管理する仕組みがないことを上記したが、
    状態を保持し管理の必要がある場合、このcookieと呼ばれるデータが用いられる。
    = Cookieを使用することで、Webサイトはユーザーの設定や状態を保存し
    ユーザーが次にWebサイトにアクセスした際に、同じ設定や状態を維持することができる
    => Webサイトにアクセスする際にブラウザがサーバーに送信する情報などが含まれている。

cookieのやり取り

WebサイトがCookieを使用する場合、以下のようなやりとりが行われる。

  1. ブラウザからWebサイトにリクエストが送信される。
  2. Webサイトは、レスポンスとしてブラウザにCookieを送信。
    Cookieには、Webサイトに関する情報や設定、状態などが含まれる。
  3. ブラウザは、Cookieを受け取る。
    ブラウザは、このCookieを次回以降の同じWebサイトへのリクエストに自動的に付与。
  4. 次回以降の同じWebサイトへのリクエスト時に、ブラウザはCookieをサーバーに送信。
  5. サーバーは、受信したCookieを解析し、適切なレスポンスを返す。

イラストにするとこのような感じ!!

Cookieは、Webサイトの機能性を向上させるだけでなく、
広告のパーソナライズやユーザーアクティビティのトラッキングなど、様々な目的に使用されている。
ただし、Cookieにはセキュリティ上のリスクも存在し、
悪意のあるWebサイトや第三者によって情報が盗まれる可能性もある。

sessionとは何か

  • webブラウザとWebサーバーのやりとりにおいて、一連の関連性のある処理の流れのこと
    もっと簡単に言えば、
    特定のユーザーがシステムにアクセスしてからログアウトするまでの時間のこと。
    ex.) ウェブサイトのセッションは、ウェブサイトにアクセスしてからログアウトするまでの時間。

sessionの流れ

  1. ユーザーがWebサイトにアクセスすると、サーバーはユーザーに対してセッションIDを発行。
  2. セッションIDは、通常はクッキーまたはURLパラメーターに保存される。
  3. ユーザーはWebサイト上でさまざまな操作を行います。たとえば、ページを表示したり、フォームに入力したり、商品をカートに追加したりする。
  4. サーバーは、それぞれの操作が発生するたびに、クライアントから送信されたセッションIDを使用して、ユーザーが同じセッション内にあることを確認。
  5. セッションが継続する限り、サーバーはユーザーが行った操作に関する情報をセッションに保存し続ける。
  6. ユーザーがWebサイトからログアウトするか、一定時間が経過すると、セッションは終了。この時点で、セッションに保存された情報はサーバーから削除。

イラストだとこうなる!!!

セッションは、セキュリティやプライバシーの観点からも重要。
たとえば、Webサイト上でセッションが開始されると、サーバーはセッションIDを発行し、
それをcookieやURLパラメーターに保存します。
このセッションIDを使用して、サーバーはユーザーが同じセッション内にいることを確認し、
適切なアクセス権を付与することができます。

一般的に、セッションはユーザーが操作を継続するために必要な期間に制限される。
セッションが終了すると、ユーザーの情報やアクティビティはサーバーから削除される。

cookieとSessionの連携

  1. ユーザーがWebサイトにアクセスすると、サーバーはクライアントに対してCookieを発行。
    Cookieには、セッションIDやその他のユーザー情報など、必要な情報が含まれる。
  2. ブラウザは、Cookieを保存し、必要に応じてWebサーバーに送信。
  3. サーバーは、Cookieに含まれる情報を使用してユーザーのセッションを特定し、セッションの状態を保持。
  4. ユーザーがWebサイト上でさまざまな操作を行うと、サーバーはセッションに関する情報を更新し続ける。
  5. ユーザーがWebサイトからログアウトすると、サーバーはセッションを終了し、関連する情報を削除。
  6. セッションが終了すると、ブラウザはCookieを削除。

このように、CookieとSessionはWebアプリケーションで密接に連携しており、
ユーザーの認証や状態管理など、さまざまな目的に使用される!!!

Discussion