アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング 設計技術

セッションタイムアウトの必要性

投稿日:

「セッションタイムアウトって何で必要なんですかね?」という問いがあった。
その人は「セッションデータの肥大化によるリソース枯渇や性能劣化を防止」という意見。
自分の場合、「それもあるかもしれないが、どちらかというとセキュリティ上の理由」という曖昧な回答。
というわけで調べてみました。

ダイジェスト

セッションタイムアウトについてネットを調べると、
ほとんどはセキュリティの記事が出てくるので、主にセキュリティ上の理由だと理解した。

  • セッションタイムアウトの主要な目的は、セッションハイジャック攻撃への対策です。
    セッションの維持時間に比例して攻撃を受ける可能性が高くなるので、使っていないのであればセッションを終了した方が安全である、という考えで理解しました。
  • セッションタイムアウト時間を決める際に次の内容が参考になると思います。
    • 利便性とセキュリティのバランスを踏まえてセッションタイムアウト時間を決める必要がある。
    • 米国連邦政府機関や米国業界向けの標準策定を行うNIST、ソフトウェア開発の標準化を行うOWASPの方針に沿って決めた方が安全である。
      (お客様や社内に説明する際の根拠として提示しやすいこともあります。)
    • OWASPのガイドライン
      Session Management Cheat Sheet: Session Expiration

      Common idle timeouts ranges are 2-5 minutes for high-value applications and 15-30 minutes for low risk applications. Absolute timeouts depend on how long a user usually uses the application. If the application is intended to be used by an office worker for a full day, an appropriate absolute timeout range could be between 4 and 8 hours.
      • アイドルタイムアウト、絶対タイムアウトを実装すべき。
        アイドルタイムアウト: ユーザの最後の操作時刻からセッションを維持し続ける時間。
        絶対タイムアウト: セッション作成時刻からセッションを維持し続ける時間。(ユーザの操作有無に依存しない。セッションの最大有効時間の意。)
      • アイドルタイムアウト:
        重要なアプリケーションの場合は2~5分、リスクの低いアプリケーションの場合は15~30分。
      • 絶対タイムアウト:
        例えば一般的な事務員を想定するなら4~8時間。
    • NISTのガイドライン
      NIST Special Publication 800-63B: Digital Identity Guidelines

      Reauthentication of the subscriber SHALL be repeated following any period of inactivity lasting 30 minutes or longer.
      • 30分以上活動がない場合は再認証しなければならない。
      • その他、使用する多要素の組み合わせによって時間を決めるような記述がありますが、ぱっと理解できませんでした…
  • GoogleやTwitter等のように、断続的に数時間や数日等の長いセッションを使用する場合はどうすれば良いのか?
    これらのアプリケーションでは、次のような仕組みを設けることでリスクを低減している。

    • リモートログアウト: ログインしているデバイスの一覧を確認でき、必要に応じて特定デバイスからのセッションを終了させることができる。
      (意図しないデバイスからの不正アクセス、友達のデバイスからのログアウト忘れ等をリモートから対処できる。)
    • 再認証: パスワード変更、メールアドレス変更等の重要な操作を行う前に再認証する。
      (被害を限定的にできる。)
    • ログイン履歴: 不正利用が疑われる場合、ログインの履歴を確認することができる。
      (不正アクセスされていないかを確認できる。)
    • 通知: パスワード変更、メールアドレス変更等の重要な操作が行われた際、ユーザに操作内容を通知する。
      (不正アクセスを早めに検知でき、被害を最小化できる。)
  • ここの記事を纏めるにあたり、次を参考にさせて頂きました。


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, 設計技術

執筆者:

関連記事

Javaにおけるファイルパスの正規化

サーバ側でのzipファイルの解凍等の際に、意図しないディレクトリやファイル(ディレクトリトラバーサル攻撃)へのアクセスを防ぐための検証として、絶対パスを正規化したい場合がある。 Fileクラスを使った …

保守運用

運用 と 保守 の 違い

若い頃は 運用 と 保守 の違いを調べても良くわからなかった… この辺を使い分けられる人をほとんど見たことない… ある事項が運用なのか保守なのかの話をすると認識が合わない&#8 …

ルートCA、サーバ・クライアント証明書の作成方法

概要 検証・開発環境での使用を前提とした、ルートCA証明書の作成、その証明書で署名したサーバ証明書とクライアント証明書を作成する手順を説明します。 可能な限りシンプルで簡単な条件・手順になっています。 …

postgresqlでの拡張のインストール

PostgreSQL10で暗号化関数を使用するため拡張(pgcrypto)をインストールした際の出来事を記載します。 事象 pgcryptoの拡張をインストールしたり、インストールの確認を行うと、その …

Webアプリ用のサイトマップ生成

Googleの検索結果への表示を促進するためにGoogleに対してサイトマップを提供する必要がある。 WordPressでは様々なプラグインを使ってサイトマップを作成できるが、Webアプリの場合は独自 …