Diyelim ki diğer sitelerin sitenizi şu şekilde "çerçevelemesini" istemiyorsanız <iframe>
:
<iframe src="http://example.org"></iframe>
Böylece tüm sayfalarınıza çerçeveleme önleyici, çerçeve bozucu JavaScript eklersiniz:
/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }
Mükemmel! Şimdi otomatik olarak "ifşa" veya içeren herhangi bir iframe kırmak. Küçük bir sorun hariç.
Sonradan anlaşıldı ki, sizin çerçeve bozma kod baskın olabilir , burada gösterildiği gibi :
<script type="text/javascript">
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://example.org/page-which-responds-with-204'
}
}, 1)
</script>
Bu kod aşağıdakileri yapar:
- tarayıcı,
window.onbeforeunload
olay işleyici aracılığıyla geçerli sayfadan her uzaklaşmaya çalıştığında bir sayacı artırır - her milisaniyede bir ateşleyen bir zamanlayıcı kurar
setInterval()
ve sayacın arttığını görürse, geçerli konumu saldırganın denetimindeki bir sunucu olarak değiştirir - söz konusu sunucu , tarayıcının herhangi bir yere gitmesine neden olmayan HTTP durum kodu 204 ile bir sayfa sunar
Benim sorum - ve bu gerçek bir problemden daha çok bir JavaScript bulmacasıdır - çerçeve bozucu uçağı nasıl yenebilirsin?
Birkaç düşüncem vardı, ama testimde hiçbir şey işe yaramadı:
onbeforeunload
olayı yoluyla temizlemeye çalışmanınonbeforeunload = null
hiçbir etkisi olmadıalert()
işlemi durdurarak ekleme , kullanıcının gerçekleşmekte olduğunu bildirir, ancak hiçbir şekilde kodu etkilemez; Tamam'ı tıklatmak, avın normal şekilde devam etmesini sağlarsetInterval()
Zamanlayıcıyı temizlemenin hiçbir yolunu düşünemiyorum
Çok fazla JavaScript programcısı değilim, işte size meydan okuyorum: hey buster, çerçeve bozucu buster'ı kırabilir misiniz?