2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Webの基礎をおさらいカレンダーAdvent Calendar 2022

Day 3

セッション管理ちゃんとできてる?セキュリティ被害に遭わないためにおさらい。

Posted at

はじめに

この記事は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日目でした。
興味をもし持ってくださった方は、購読いただけると嬉しいです!

参考文献

[ThinkIT] 第4回:セッション乗っ取り
TechRacho Webアプリのセッション管理とデータ保存を学ぶ

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?