Chrome Cache to XSS
より詳細な詳細はこの解説をご覧ください。
ここで議論されている技術は、2つの主要なキャッシュタイプ、バック/フォワードキャッシュ(bfcache)とディスクキャッシュの動作と相互作用を理解することに関わります。 bfcacheは、JavaScriptヒープを含むページの完全なスナップショットを保存し、より包括的なスナップショットを保存できるため、バック/フォワードナビゲーションにおいてディスクキャッシュよりも優先されます。一方、ディスクキャッシュは、JavaScriptヒープを含まないWebから取得したリソースを保存し、通信コストを削減するためにバック/フォワードナビゲーションに使用されます。ディスクキャッシュの興味深い側面は、fetch
を使用して取得されたリソースが含まれていることであり、アクセスされたURLリソースはブラウザによってキャッシュからレンダリングされます。
主なポイント:
bfcacheはバック/フォワードナビゲーションにおいてディスクキャッシュよりも優先されます。
bfcacheを無効にするには、後者を無効にする必要があります。
bfcacheの無効化:
デフォルトでは、Puppeteerはbfcacheを無効にします。これは、Chromiumのドキュメントに記載されている条件と一致しています。bfcacheを無効にする効果的な方法の1つは、RelatedActiveContentsExist
を使用することです。これは、window.opener
への参照を保持するwindow.open()
でページを開くことで実現されます。
動作の再現:
ウェブページ、例えば
https://example.com
にアクセスします。open("http://spanote.seccon.games:3000/api/token")
を実行し、500のステータスコードでサーバーレスポンスが返されます。新しく開いたタブで
http://spanote.seccon.games:3000/
に移動します。このアクションにより、http://spanote.seccon.games:3000/api/token
のレスポンスがディスクキャッシュとしてキャッシュされます。history.back()
を使用して戻ると、キャッシュされたJSONレスポンスがページ上にレンダリングされます。
ディスクキャッシュが利用されたことを確認するためには、Google ChromeのDevToolsを使用して確認できます。
bfcacheとディスクキャッシュに関する詳細については、それぞれweb.devのbfcacheとChromiumのディスクキャッシュに関する設計文書で参照できます。
Last updated