セッション

2022-04-13 (水) 14:57:07

セッション とは

  • セッショントークン
  • セッションレプリケーション
  • スティッキーセッション方式

セッション管理の種類

  • セッションID(SessionID)
  • セッションIDの受け渡し方法
    • Cookie
    • hiddenフィールド
      • Webページ上の非表示フィールド
    • Query_String (URLパラメータ)
      • URLのPATH(~?sid=~)
  • パーミッシブなセッション管理

※端末IDに対してsidを紐づける

セッションID

  • セッションIDの要件
    • 第三者による推測が困難な値であること
    • 第三者により強制されないこと
    • 第三者に漏洩しないこと
  • 対応・対策
    • セッションIDの値は充分な長さのある乱数ハッシュ値を使う。
    • セッションIDの値が連番の場合、悪意のあるユーザによるなりすましが簡単にできてしまう。(自身に割り振られた値の前後に有効な値があることが推測可能なため)
    • ログイン後に新しいセッションIDを発行して、古いセッションIDを無効にする。

Cookie

  • セッションIDのみをCookieに保存する。
    • セッションID以外の値は、サーバ側に保存し管理する。
  • Cookieの有効期限をできるだけ短くする。
  • Cookieの有効範囲を最小限にする。
  • Cookieではセッションフィクセーション攻撃を防ぐことができない。
  • Cookieに保存する値を予測、盗聴等により盗難された場合は、悪意のあるユーザが盗用することができてしまう。
  • IDやトークンを予測困難な値にする、ネットワークをSSL暗号化する等で予防はできる。
  • 端末側が使えない場合がある。
  • ネットワークのデータ量が増える。

URL

  • セキュリティ上の注意が必要。HTTPS通信を使う。ログの管理など。
  • 第三者にURLを参照されることにより、セッションIDが漏洩する。
  • サーバのログにセッションIDが保存される。

端末ID

  • HTTPリクエストに含まれる端末IDを使う。IDとパスワードを入力せずに認証が可能。

セッション管理の脅威と脆弱性

セッション管理情報の漏洩

  • 盗聴による漏洩
  • GETメソッドが使われることでリファラのログにクエリストリングが保存されて漏洩する
  • セッションIDの推測が容易

セッションの無効化

ログアウト機能

  • ユーザの操作によりログアウトしてセッションを無効化することができる機能

セッションタイムアウト

  • Webアプリのセッションタイムアウト機能。
  • ユーザがログアウトの操作をしなかった場合に自動的にセッションを無効化するための機能。

ステートフル/ステートレス

ステートレス

  • サーバがアプリの状態を保存しない
  • REST
  • RESTful

ステートフル

スケールアウトするシステムでの考慮点

  • データストレージにKVSを使う
  • セッションIDではなく、セッションの値をCookieに保存する
  • 次のリクエストに引き継ぐ情報をフォームに非表示で埋め込む

関連用語