Shikata Ga Nai

Private? There is no such things.

Webキャッシュの有無を見抜く:キャッシュされたレスポンスの検出方法

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 publicmax-age が付いているか
応答時間の比較 キャッシュされた方が明らかに速い
2回目以降の挙動 初回はmiss、2回目はhitになることを確認

レスポンスがキャッシュされたかどうかを見抜けることが、脆弱性の有無と攻撃成立のカギになります。

Best regards, (^^ゞ