Hello there, ('ω')ノ
✅ Cache Key(キャッシュキー)とは?
Webキャッシュがリクエストを受け取った際に:
「このリクエストは、すでにキャッシュ済みのレスポンスを使えるか?」
を判断するために生成する識別用の値が「キャッシュキー(cache key)」です。
🔍 キャッシュキーを構成する要素
通常は以下の情報から構成されます:
要素 | 説明 |
---|---|
URLのパス | 例:/product/123 |
クエリパラメータ | 例:?page=1&sort=asc |
HTTPヘッダー | User-Agent や Accept-Encoding などが含まれる場合もある |
リクエストメソッド | GET や POST などの違いによって分離することもある |
コンテンツタイプ | 特定のヘッダーによって異なるキャッシュ動作になることもある |
⚙️ 判定の流れ
- キャッシュはリクエストからキャッシュキーを生成
- 過去のキャッシュに一致するキーがあれば、そのレスポンスを直接返す(=キャッシュヒット)
- 一致がなければ、オリジンサーバーに問い合わせる(=キャッシュミス)
📌 セキュリティ上の注目点
キャッシュキーの定義ミスや過不足によって以下のような問題が発生します:
- ユーザー固有のリクエスト(例:ログイン済みページ)が共通キャッシュに誤って保存される
- 不要なヘッダーがキャッシュキーに含まれておらず、他ユーザーに誤ったレスポンスが返される
- 攻撃者がキャッシュキーを意図的に調整して悪意あるレスポンスを注入(=Web Cache Poisoning)
⚠️ 注意:キャッシュキー操作はWeb Cache Poisoningにも繋がる
**「悪意あるリクエストでキャッシュを汚染し、それを他ユーザーに見せる」**という攻撃手法があります。
詳細は「Web Cache Poisoning」の項目で紹介されており、パラメータの順序や不要なヘッダー追加によってキャッシュ挙動が変化する点が悪用されます。
✅ まとめ
ポイント | 内容 |
---|---|
Cache Key はリクエストの識別子 | 同じキーのリクエストは同じレスポンスを共有 |
構成ミスはセキュリティ事故を招く | 本来キャッシュしてはならない情報が漏洩することも |
キャッシュキーを操作すると攻撃に転用可能 | → Web Cache Poisoning に発展 |
Best regards, (^^ゞ