JavaScript Tips | セキュリティ:Token漏洩を防ぐ設計

JavaScript JavaScript
スポンサーリンク
スポンサーリンク
  1. Token漏洩を防ぐ設計は「認証の“鍵”を絶対に落とさないための全体設計」です
  2. Tokenが漏洩する典型的なパターンをまず知る
    1. 1. Web Storage(localStorage / sessionStorage)からの漏洩
    2. 2. URLやログにトークンを載せてしまう
    3. 3. ブラウザ拡張や他のスクリプトからの盗み見
  3. ステップ1:Tokenの「置き場所」を設計する(HttpOnly Cookieを基本にする)
    1. 推奨:HttpOnly Cookieに保存する
  4. ステップ2:Web Storageにトークンを保存しないユーティリティ設計
    1. 使用例(UI状態だけを保存)
  5. ステップ3:Tokenを「画面やログに出さない」設計を徹底する
    1. 1. URLにトークンを載せない
    2. 2. ログにトークンを出さない
  6. ステップ4:Tokenの「寿命」を短くする(短期アクセストークン+リフレッシュトークン)
    1. アクセストークンは短期有効にする
    2. リフレッシュトークンはより厳重に扱う
  7. ステップ5:Tokenを扱うコードを「1箇所」に集約する(ユーティリティ化)
    1. 使用例
  8. ステップ6:XSS対策とToken設計をセットで考える(重要な深掘り)
  9. ステップ7:チームで共有するための「Token取り扱いルール」をコードとドキュメントに刻む
    1. コードコメントで明示する
    2. レビュー時のチェックポイント
  10. まとめ:Token漏洩を防ぐ設計は「認証の鍵を守るための、地味だけど決定的に重要な工夫の積み重ね」です

Token漏洩を防ぐ設計は「認証の“鍵”を絶対に落とさないための全体設計」です

業務システムで使われるアクセストークン(JWTなど)は、 ユーザーの認証・権限を表す 「鍵」そのもの です。

  • このトークンを持っている人は、ユーザーになりすませる
  • このトークンが漏洩すると、攻撃者が自由にAPIを叩ける
  • このトークンが長期間有効だと、被害も長期間続く

つまり、「Token漏洩を防ぐ設計」=「システム全体の安全性を守る設計」 です。

ここでは、初心者向けに、 「どこから漏れるのか」→「どう設計で防ぐのか」→「実務で使えるユーティリティ」 という流れでステップバイステップで解説していきます。

Tokenが漏洩する典型的なパターンをまず知る

1. Web Storage(localStorage / sessionStorage)からの漏洩

localStorage.setItem("auth.token", token); // よくある危険パターン
JavaScript

XSS攻撃が成立すると、攻撃者は次のようなコードを書けます。

for (let i = 0; i < localStorage.length; i++) {
  const key = localStorage.key(i);
  const value = localStorage.getItem(key);
  // 攻撃者のサーバーへ送信
}
JavaScript

ここにトークンが入っていれば、即漏洩です。

2. URLやログにトークンを載せてしまう

// 危険な例:トークンをクエリパラメータに載せる
const url = `/api?token=${token}`;
console.log("API呼び出し:", url); // ログにトークンが残る
JavaScript
  • ブラウザの履歴
  • サーバーログ
  • プロキシログ

などにトークンが残り、後から参照されてしまう可能性があります。

3. ブラウザ拡張や他のスクリプトからの盗み見

トークンをJavaScriptから自由に読める場所に置いておくと、 悪意ある拡張機能やサードパーティスクリプトからもアクセスされる可能性があります。

タイトルとURLをコピーしました