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

主に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. システムエンジニアリング, 設計技術

執筆者:

関連記事

デジタル証明書のエンコードと拡張子の違い

デジタル証明書の種類と拡張子の理解が曖昧だったので整理してみました。 証明書や鍵そのものは基本的にはバイナリデータです。 これらのデータは、X.509やPKCSで仕様化されています。 X.509: 公 …

grid

Excelで月初日、第1週日、第2週日を算出する

プロジェクト管理で毎年、毎月のタスクを管理するために、この辺の操作を行うためのExcel関数を調べたので記載しておきます。 Excelの関数式 ここでは、基本的に5営業日単位で管理したいことと、最初の …

システム開発でのmybatis-generatorの利用

システム開発における製造工程の前段では、開発メンバの負荷軽減や共通化のために、各テーブルに対するSELECT/INSERT/UPDATE/DELETEを容易に行うための共通クラスを準備することが望まれ …

ASP.NET Coreを使った独自フレームワーク開発の考察

ASP.NET CoreをベースとしたWebアプリ用フレームワークを開発するためのナレッジ置き場です。 ASP.NET Core3系のMVC + Razorを使用する前提の情報です。 まだ思い付きで書 …

JBoss EAP7でDEBUG/TRACEログを出力

JBoss EAP7でアプリのDEBUGやTRACEのログを出力する方法を記載します。 開発の序盤でアプリのDEBUGログがeclipseのコンソールやログファイルに出力されず、困る場合があるので、メ …