認証情報をどこに保存するか - ブラウザの脅威モデル

入門 | 6分 で読める | 2026.06.14

公式ドキュメント

保存場所だけで安全性は決まらない

memory、sessionStorage、localStorage、CookieをJavaScript読取、自動送信、消える時期、XSSとCSRFの観点で比較し、architectureに応じて選ぶ表

保存期間などの基本比較は、canonical記事のlocalStorageとCookieの違いで確認できます。この記事では、認証情報の置き場所を決めるときの脅威モデルに絞ります。

「どこが一番安全か」ではなく、攻撃時に何を盗まれ、何を操作され、どのくらい被害が続くかを比較します。

見る軸は次の5つです。

  1. JavaScriptから値を読めるか
  2. ブラウザがリクエストへ自動送信するか
  3. ページやタブを閉じた後も残るか
  4. 漏えい時に使える権限と有効期間
  5. 更新・失効・ログアウトをどう実現するか
保存場所XSSで値を読まれる可能性自動送信主な注意
メモリ実行中はありなし永続化しないが、実行中のXSSは操作できる
sessionStorageありなしタブ終了まで残り、XSSから読める
localStorageありなし長期間残り、XSSから読める
HttpOnly Cookie値の直接読取は不可ありXSSによる操作とCSRFは別対策が必要

認証情報ごとに役割を決める

認証情報を置く場所として見ると、判断は次のようになります。

保存場所access tokenrefresh tokenセッションID
メモリ短命なら候補リロードで失われる通常は不要
sessionStorageXSSとタブ寿命を考慮長期tokenには不向き通常は使わない
localStorage長期保存を避ける長期保存を避ける通常は使わない
HttpOnly Cookie自動送信とCSRFを含め設計認証基盤の推奨次第代表的な選択
サーバー側ストアBFF等で管理可能BFF等で管理可能IDに対応する状態を保存

BFF構成では、ブラウザにHttpOnly CookieのセッションIDを持たせ、access tokenやrefresh tokenをサーバー側で管理できます。これは有力な選択肢ですが、サーバー側の状態管理、CookieのCSRF対策、セッション固定・失効対策が必要です。

リロードで消えることは悪いことではない

初心者のうちは、リロードしてログイン情報が消えると「不便だからlocalStorageに入れよう」と考えがちです。

しかし、認証情報は便利に残せばよいものではありません。長く残るほど、盗まれたときの被害も長く残ります。

たとえば、メモリ上に短命access tokenだけを置き、リロード後は認証フローで復元する設計があります。永続化による露出時間は減りますが、実行中のXSSから安全になるわけではありません。

ポイント: 認証設計では「消えないから便利」だけで判断しません。「盗まれたら何ができるか」「どれくらいの期間使えるか」で判断します。

まとめ

認証情報の保存場所は、XSSだけで決めません。

  • メモリ、sessionStorage、localStorageはJavaScript実行中のXSSから読まれ得る
  • 永続化するほど、窃取できる時間が長くなる
  • HttpOnly Cookieは値の窃取を抑えるが、不正操作やCSRFは別に防ぐ
  • 権限、有効期間、更新、失効、ログアウトまで含めて選ぶ

認証情報では、保存場所の選択がセキュリティ設計そのものになります。

参考リソース

次に読む記事

← 一覧に戻る
PR
PR
PR
PR