Shikata Ga Nai

Private? There is no such things.

Cache Keyの仕組みとWebキャッシュセキュリティへの影響

Hello there, ('ω')ノ

✅ Cache Key(キャッシュキー)とは?

Webキャッシュがリクエストを受け取った際に:

「このリクエストは、すでにキャッシュ済みのレスポンスを使えるか?」

を判断するために生成する識別用の値が「キャッシュキー(cache key)」です。


🔍 キャッシュキーを構成する要素

通常は以下の情報から構成されます:

要素 説明
URLのパス 例:/product/123
クエリパラメータ 例:?page=1&sort=asc
HTTPヘッダー User-Agent や Accept-Encoding などが含まれる場合もある
リクエストメソッド GET や POST などの違いによって分離することもある
コンテンツタイプ 特定のヘッダーによって異なるキャッシュ動作になることもある

⚙️ 判定の流れ

  1. キャッシュはリクエストからキャッシュキーを生成
  2. 過去のキャッシュに一致するキーがあれば、そのレスポンスを直接返す(=キャッシュヒット)
  3. 一致がなければ、オリジンサーバーに問い合わせる(=キャッシュミス)

📌 セキュリティ上の注目点

キャッシュキーの定義ミスや過不足によって以下のような問題が発生します:

  • ユーザー固有のリクエスト(例:ログイン済みページ)が共通キャッシュに誤って保存される
  • 不要なヘッダーがキャッシュキーに含まれておらず、他ユーザーに誤ったレスポンスが返される
  • 攻撃者がキャッシュキーを意図的に調整して悪意あるレスポンスを注入(=Web Cache Poisoning)

⚠️ 注意:キャッシュキー操作はWeb Cache Poisoningにも繋がる

**「悪意あるリクエストでキャッシュを汚染し、それを他ユーザーに見せる」**という攻撃手法があります。

詳細は「Web Cache Poisoning」の項目で紹介されており、パラメータの順序や不要なヘッダー追加によってキャッシュ挙動が変化する点が悪用されます。


✅ まとめ

ポイント 内容
Cache Key はリクエストの識別子 同じキーのリクエストは同じレスポンスを共有
構成ミスはセキュリティ事故を招く 本来キャッシュしてはならない情報が漏洩することも
キャッシュキーを操作すると攻撃に転用可能 → Web Cache Poisoning に発展

Best regards, (^^ゞ