Hello there, ('ω')ノ
✅ なぜキャッシュレスポンスの検出が重要か?
Web Cache Deception や Web Cache Poisoning の脆弱性を調査・悪用する上で:
「このレスポンスはキャッシュされたものか?それともオリジンサーバーの応答か?」
を正確に判断できることが非常に重要です。
🔍 主な検出手段
① レスポンスヘッダーを確認する
🟡 X-Cache
ヘッダー
このヘッダーは、キャッシュの状態を直接示すことがあります:
値 | 意味 |
---|---|
X-Cache: hit |
キャッシュに存在 → キャッシュからレスポンスされた |
X-Cache: miss |
初回のリクエスト → オリジンサーバーから取得し、キャッシュに保存された可能性あり |
X-Cache: dynamic |
サーバーが動的に生成した → キャッシュ不適切なコンテンツ |
X-Cache: refresh |
キャッシュが古くなり再取得された → 新しい内容で更新された状態 |
👉 miss
のあとに同じリクエストでhit
に変わるか確認すると、キャッシュされたことが確定できます。
🟡 Cache-Control
ヘッダー
Cache-Control: public, max-age=3600
このようなヘッダーが含まれると:
- キャッシュ可能であることをサーバーが許可している
- ただし、実際にキャッシュされるかどうかはキャッシュ側の設定にも依存する
注意:このヘッダーがあっても、X-Cache: hit
がなければキャッシュされていないこともある。
② レスポンスタイム(応答時間)の比較
- 同じURLに対して何度かリクエストを送信し、
- もし明らかに2回目以降が速くなっていればキャッシュが利用されている可能性大
例:
リクエスト回数 | レスポンスタイム | 考察 |
---|---|---|
1回目 | 600ms | X-Cache: miss or dynamic |
2回目 | 120ms | X-Cache: hit の可能性高い |
✅ まとめ:キャッシュレスポンスの検出チェックリスト
チェックポイント | 見るべき内容 |
---|---|
ヘッダー X-Cache |
hit / miss / dynamic / refresh など |
ヘッダー Cache-Control |
public や max-age が付いているか |
応答時間の比較 | キャッシュされた方が明らかに速い |
2回目以降の挙動 | 初回はmiss 、2回目はhit になることを確認 |
レスポンスがキャッシュされたかどうかを見抜けることが、脆弱性の有無と攻撃成立のカギになります。
Best regards, (^^ゞ