← 記事一覧に戻る

JWT認証においてJWTをlocalStorageに保存する場合とCookieに保存する場合のセキュリティ強度の違い

2025/8/10
JWT認証 Cookie セキュリティ

localStorage保存

  • 同一オリジン内ではJSによりlocalStorageにアクセスできるため、JSからJWTを参照できる
  • なのでXSSによって悪意あるJSがJWTを攻撃者に流出するリスクがある
  • CSRFにおいては、リクエスト時にJWTが自動的に送信されないため発生しない

Cookie保存

  • httpOnly属性=trueでJSからcookieを参照できない
  • secure属性=trueでhttpsの暗号化通信の時のみcookieを送信するよう制御できる
  • なので、XSSによる被害は受けない
観点localStorage に保存Cookie に保存(HttpOnly; Secure; SameSite 前提)
XSS によるトークン窃取弱い:JS で読み取り可。XSS発生=即流出強いHttpOnly で JS から読めない(ただし XSS 自体は別途対策必要)
CSRF リスク低い:自動送信されないため原理的に起きにくい高い:自動送信されるため対策必須(SameSite/CSRFトークン)
送信制御(CORS/ヘッダ)しやすい:自分でAuthorizationを付与しにくい:ブラウザが自動送信(CORSは応答側制御+credentials
ブラウザ属性による防御なし(HttpOnly/SameSite不可)あり:HttpOnly/Secure/SameSite/__Host- で強化可
サブドメイン注入/固定化該当しないDomain誤設定で影響拡大の恐れ → __Host- 推奨

参考

SPAのログイン認証のベストプラクティスがわからなかったのでわりと網羅的に研究してみた〜JWT or Session どっち?〜 - Qiita