Chrome Cache to XSS
Daha derinlemesine detaylar bu yazıda.
Burada tartışılan teknik, iki ana önbellek türünün davranışını ve etkileşimini anlamayı içerir: back/forward cache (bfcache) ve disk cache. JavaScript yığınını da içeren bir sayfanın tam anlık görüntüsünü saklayan bfcache, daha kapsamlı bir anlık görüntü saklama yeteneği nedeniyle geri/ileri navigasyonlar için disk önbelleğinden önceliklidir. Disk önbelleği ise, JavaScript yığınını içermeden web'den alınan kaynakları saklar ve iletişim maliyetlerini azaltmak için geri/ileri navigasyonlarda kullanılır. Disk önbelleğinin ilginç bir yönü, fetch
kullanılarak alınan kaynakları içermesidir; bu, erişilen URL kaynaklarının tarayıcı tarafından önbellekten işleneceği anlamına gelir.
Ana Noktalar:
bfcache, geri/ileri navigasyonlarda disk önbelleğinden önceliklidir.
Disk önbelleğinde saklanan bir sayfayı kullanmak için, bfcache devre dışı bırakılmalıdır.
bfcache'i Devre Dışı Bırakma:
Varsayılan olarak, Puppeteer bfcache'i devre dışı bırakır ve bu, Chromium'un belgelerinde listelenen koşullarla uyumludur. bfcache'i devre dışı bırakmanın etkili bir yöntemi, window.opener
referansını koruyan window.open()
ile bir sayfa açarak RelatedActiveContentsExist
kullanmaktır.
Davranışı Yeniden Üretme:
Bir web sayfasını ziyaret edin, örneğin,
https://example.com
.open("http://spanote.seccon.games:3000/api/token")
komutunu çalıştırın; bu, 500 durum kodu ile bir sunucu yanıtı alır.Yeni açılan sekmede
http://spanote.seccon.games:3000/
adresine gidin. Bu işlem,http://spanote.seccon.games:3000/api/token
yanıtını disk önbelleği olarak saklar.Geri gitmek için
history.back()
kullanın. Bu işlem, sayfada önbelleğe alınmış JSON yanıtının işlenmesine neden olur.
Disk önbelleğinin kullanıldığını doğrulamak için Google Chrome'daki Geliştirici Araçları kullanılabilir.
bfcache ve disk önbelleği hakkında daha fazla bilgi için, web.dev'de bfcache ve Chromium'un disk önbelleği tasarım belgeleri referanslarına bakabilirsiniz.
Last updated