はじめに
この記事はWebの基礎をおさらいカレンダー Advent Calendar 2022の3日目です。
このカレンダーでは、なんとなくわかった気になっている、Webの知識をおさらいするカレンダーです。
興味をもし持ってくださった方は、購読いただけると嬉しいです!
3日目は、セッション管理について紹介します。
セッションとは
- 一連の処理・操作・通信などの開始から終了までを指す。
- 例: ログイン~ログアウトまで
HTTPはステートレスなので、通信状態を保持しません。
そのため、ユーザーを識別し、状態を管理するために、セッション管理を行う必要がある。
セッション管理を行うことで、ログインしたユーザーごとに異なるマイページを表示したり、ECサイトでカートに商品を保持したりといったことが行えるようになる。
セッション管理の手法
続いて、セッション管理の方法について説明していきます。
以下の三つの方法がありますが、CookieにセッションIDを保存するやり方が主流です。
他の方法は、セキュリティリスクが大きかったり、実装が大変だったりするためです。
- URLにセッションIDを埋め込む
- フォームにセッションIDを埋め込む
- CookieにセッションIDを保存する
上記、三つの方法について、具体的に説明していきます。
URLにセッションIDを埋め込む
URLのクエリストリングにセッションIDを埋め込む方式です。
例: example.com?sid=12345
常に、セッションIDが付与されている状態のため、URLが漏洩した瞬間、情報漏洩につながります。
-
メリット
- ガラケーなどCookieが使えないサイトでも使える
-
デメリット
- セッションIDが漏れやすく、セキュリティリスクが高い
この手法は、基本的に使わないでください。
検索エンジンがセッションID付きのURLをキャッシュしてしまったり、SNSなどでURLを共有するなど
簡単にセッションIDを漏洩してしまう危険があります。
フォームにセッションIDを埋め込む
フォームのhiddenフィールドにセッションIDを埋め込む方式です。
ページ遷移を全てフォームで行う必要があるため、ユーザー体験に影響が出ないようにするには工夫が必要です。
セキュリティリスクは一番低いので、購入ページなどの重要箇所といった部分的な使用がおすすめです。
-
メリット
- セッションIDが漏れにくい
-
デメリット
- ページ遷移を全てフォームで管理する必要があるため、実装が大変
CookieにセッションIDを保存する
Cookieについては、2日目のアドベントカレンダーにまとめたので、こちらをご確認ください。
Set-Cookieヘッダーを使用してブラウザにセッションIDを保存させます。
実装の手間が少ない反面、
XSS(クロスサイトスクリプティング)によるCookie情報の抜き取りやHTTPSを使用しないHTTP通信での抜き取りなどの対策が必要になります。
-
メリット
- 実装の手間が少ない
-
デメリット
- セキュリティ攻撃の対象になりやすい
セッションによるセキュリティリスク
セッションハイジャック
名前の通り、セッションを乗っ取る(ハイジャックする)行為です。
セッションが乗っ取られる原因として、以下が挙げられます。
- 推測されやすいセッションIDになっている
- 日付や固有名など推測しやすいものの場合、総当たり攻撃や推察によって突破されてしまう。
- ユーザーからセッションIDを抜き取る
- XSSによるCookie情報の抜き取り
- HTTP通信でのCookie情報の抜き取り
- セッションIDの固定化(セッション・フィクセーション)
- URLにセッションIDを埋め込む
- CookieのセッションIDをXSSなどで上書きする
- Set-Cookieヘッダーを追加して任意の値を設定する
対策
- セッションIDを推測しにくいものにする。ランダム生成値など。
- ワンタイムセッションIDを発行するなど、常に新しいセッションIDを発行するようにする。
- アプリケーションの脆弱性を塞ぐ。XSSの対策、HTTPS通信にするなど。
おわりに
以上、 Webでのセッション管理方法についての説明でした!
セキュリティリスクに気をつけながら、セッション管理をうまく活用しましょう!
Webの基礎をおさらいカレンダー Advent Calendar 2022の3日目でした。
興味をもし持ってくださった方は、購読いただけると嬉しいです!