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

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

執筆者:

関連記事

ASP.NET Core: CreditCard属性のjavascriptエラー

Visual Studio 2019でASP.NET Coreプロジェクトを作成して[CreditCard]属性を使用すると、クライアント側で次のエラーが発生します。 Uncaught TypeErr …

DOSバッチリファレンス

ちょっとした事でbatファイルを作成することが多い。 そのたびにネット検索するのが非効率なため、リファレンス化しようと思う。 そういう目的なので、自分がよく調べる項目に絞っている。 開発時の注意点 直 …

chromeのjavascriptを一時的に無効化

Webアプリの開発やテストで、クライアント側のバリデーションを無効にしてサーバ側バリデーションの動作確認する、等のように一時的にjavascriptを無効にしたい場合があります。これを実現するための方 …

WebサイトのSSL化

次のようなGoogleウェブマスター向け公式ブログでの推奨や、リモートか管理の安全性向上の向上のためにSSL(TLS)を有効にする。 概要 Googleさんの考え 保護されたウェブの普及を目指して(2 …

jQueryによるデフォルトボタンの実装

デフォルトボタンについて Webページ上でエンターキーを押した場合、そのページ上であらかじめ決められたボタンをクリックしたかのように処理を実行する仕組みがある。何らかのデータの検索を行うようなページは …