応用情報技術者 2021年 春期 午前2 問44
問題文
Webシステムにおいて、セッションの乗っ取りの機会を減らすために、利用者のログアウト時にWebサーバ又は Webブラウザにおいて行うべき処理はどれか。ここで、利用者は自分専用のPCにおいて、Webブラウザを利用しているものとする。
選択肢
ア:WebサーバにおいてセッションIDを内蔵ストレージに格納する。
イ:WebサーバにおいてセッションIDを無効にする。(正解)
ウ:Webブラウザにおいてキャッシュしている Webページをクリアする。
エ:WebブラウザにおいてセッションIDを内蔵ストレージに格納する。
🔒 解説は解答すると表示されます
ログアウト時のセッション無効化【午前2解説】
正解の理由
ログアウト時に最も重要なのは、サーバ側で当該利用者のセッション情報(セッションIDや関連データ)を再利用できないようにすることです。したがって、Webサーバ側でセッションを無効化する処理(該当する選択肢は イ)が適切です。サーバ側でセッションを無効化すれば、そのセッションIDがクライアント側に残っていても同じIDで認証済み状態に戻ることはできません。これにより、ログアウト後のセッション乗っ取り(セッション固定や再利用)を直接防げます。
解法ステップ
- 問題の目的を確認:ログアウト時に「セッションの乗っ取りの機会を減らす」こと。
- 「乗っ取り」は通常、認証トークン(セッションID)が有効であることを悪用される点に着目。
- 各選択肢が「セッションIDの有効性/再利用をどう扱うか」を満たすか評価する。
- サーバ側でセッションを無効化すれば、クライアントに残るトークンの再利用を防げるため最適と判断する(イ)。
選択肢別の誤答解説
- ア: WebサーバにおいてセッションIDを内蔵ストレージに格納する。
→ サーバ側でセッションデータを格納するのは通常の実装であり安全性そのものを損なうものではありません。ただし「格納する」だけではログアウト時の対策とはなりません。ログアウト時には格納したセッションを削除または無効化する必要があります。したがって単に格納する行為は問題の目的(ログアウト時の乗っ取り機会の低減)に直接応えません。 - イ: WebサーバにおいてセッションIDを無効にする。
→ サーバ側でセッションを無効化する(サーバ内データの削除/無効フラグ付与、該当セッションIDを受け付けないようにする)ことで、ログアウト後に同じIDを使ってアクセスしても認証されなくなります。これが最も効果的であり正答です。 - ウ: WebブラウザにおいてキャッシュしているWebページをクリアする。
→ キャッシュのクリアはページの再表示や機密情報の露出を抑える助けにはなりますが、セッションID(特にクッキーとして保持されるもの)を消すものではありません。キャッシュ消去だけではセッションの再利用を防げないため不十分です。 - エ: WebブラウザにおいてセッションIDを内蔵ストレージに格納する。
→ ブラウザのローカルストレージやlocalStorage等にセッションIDを置くと、JavaScriptから容易に参照でき、XSS(クロスサイトスクリプティング)などで盗まれるリスクが高まります。ログアウト時にブラウザ内にトークンを残すことは乗っ取りのリスクを増やすため不適切です。
よくある誤解
- 「キャッシュを消せばセッションも消える」
→ キャッシュは表示データの保存であり、HTTPクッキーやlocalStorageの内容とは別です。セッションの無効化にはサーバ側処理やクッキー削除が必要です。 - 「サーバにセッションを置くのは危ない」
→ サーバ側でセッションを管理するのは一般的であり、安全性は高いです。問題は管理方法(適切な無効化、タイムアウト、保存場所の保護)にあります。 - 「ブラウザのlocalStorageはクッキーより安全」
→ localStorageはHttpOnlyが使えないため、XSS攻撃で盗まれやすく、セッション管理用トークンの保存には向きません。
補足コラム
効果的なログアウト処理とセッション対策には、以下を組み合わせると良いです。
- サーバ側でセッションを明示的に破棄(セッションIDを無効化し、サーバ内データを削除)。
- レスポンスでセッション用クッキーを削除または即時期限切れに設定(Set-CookieでMax-Age=0等)。
- セッション固定攻撃対策としてログイン時にセッションIDを再生成(セッションIDローテーション)。
- クッキーに Secure / HttpOnly / SameSite を設定し、XSS・CSRFリスクを低減。
- セッションの有効期限を短くし、長時間放置されるトークンを減らす。
例:ログアウト時に送るHTTPヘッダ(クッキー削除の一例)
HTTP/1.1 200 OK
Set-Cookie: session=; Max-Age=0; Path=/; Secure; HttpOnly; SameSite=Strict
FAQ
Q: ログアウト時にクッキーを削除すれば十分ですか?
A: クッキー削除は重要ですが、クッキーだけ消してサーバ側のセッションを無効にしなければ、同じセッションIDが再利用されるおそれがあります。サーバ側の無効化と組み合わせてください。
A: クッキー削除は重要ですが、クッキーだけ消してサーバ側のセッションを無効にしなければ、同じセッションIDが再利用されるおそれがあります。サーバ側の無効化と組み合わせてください。
Q: 個人専用PCならブラウザにセッションを残しても良い?
A: 利便性のために短期的に残す運用はあるものの、他の攻撃(マルウェア、XSS等)リスクは残るため、ログアウト時はサーバ側無効化が必須です。
A: 利便性のために短期的に残す運用はあるものの、他の攻撃(マルウェア、XSS等)リスクは残るため、ログアウト時はサーバ側無効化が必須です。
Q: セッションIDはlocalStorageに保存しても良い?
A: 一般に避けるべきです。localStorageはHttpOnlyにできず、XSS攻撃で盗まれやすいため、認証トークンはできるだけHttpOnlyクッキーで扱うのが望ましいです。
A: 一般に避けるべきです。localStorageはHttpOnlyにできず、XSS攻撃で盗まれやすいため、認証トークンはできるだけHttpOnlyクッキーで扱うのが望ましいです。
関連キーワード: セッションハイジャック、セッション無効化、セッションクッキー、HttpOnly、SameSite、ログアウト処理、セッション管理

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

