javascript - IFRAME'in üst düzey pencereyi yönlendirmesini nasıl önlerim
Bazı web sitelerinde IFRAME kaplamalarından "çıkmak" için kod bulunur, bu da demektir ki bir sayfa A bir üst sayfa P içinde IFRAME olarak yüklendiğinde, A içindeki bazı Javascript, dıştaki pencereyi A'ya yönlendirir.
Genellikle bu Javascript şöyle görünür:
<script type="text/javascript">
if (top.location.href != self.location.href)
top.location.href = self.location.href;
</script>
Sorum şudur: Ana sayfa P’nin yazarı olarak ve iç sayfa A’nın yazarı olmayarak, A’nın bu çıkışı yapmasını nasıl engelleyebilirim?
Not: Bana öyle geliyor ki bu bir çapraz site güvenlik ihlali olmalı, ama öyle değil.
Cevap #1
HTML5 ile iframe sandbox özelliği eklendi. Bu yazının yazıldığı sırada bu, Chrome, Safari, Firefox ve IE ile Opera'nın son sürümlerinde çalışıyor ama büyük ölçüde sizin istediğinizi yapıyor:
<iframe src="url" sandbox="allow-forms allow-scripts"></iframe>
Eğer üst düzey yönlendirmelere izin vermek istiyorsanız sandbox="allow-top-navigation" belirtin.
Cevap #2
iframe öğesinde sandbox özniteliğini kullanıyorum:
allow-formsform gönderimine izin verallow-popupsaçılır pencerelere izin verirallow-pointer-lockişaretçi kilidine izin verirallow-same-originbelgenin kaynağını korumasına izin verirallow-scriptsJavaScript yürütülmesine izin verir ve ayrıca özelliklerin otomatik olarak tetiklenmesine de izin verirallow-top-navigation, belgenin en üst düzey pencereye giderek çerçeveden çıkmasına izin verir
Üst navigasyon engellemek istediğiniz şeydir, bu yüzden bunu dışarıda bırakın ve izin verilmeyecektir. Dışarıda bırakılan her şey engellenecektir
ör.
<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms" src="http://www.example.com"</iframe>
Cevap #3
Kullanıcının sayfadan ayrılmak isteyip istemediğini seçmesine izin verecek onbeforeunload özelliğini kullanmayı deneyin.
Örnek: https://developer.mozilla.org/en-US/docs/Web/API/Window.onbeforeunload
HTML5'te sandbox özelliğini kullanabilirsiniz. Lütfen aşağıdaki Pankrat'ın cevabına bakın. http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/
Cevap #4
w3.org spesifikasyonunu okuduktan sonra sandbox özelliğini buldum.
Iframe'ın yönlendirmesini engelleyen sandbox="" ayarını yapabilirsiniz. Bununla birlikte, iframe yine de yönlendirme yapmayacaktır. Temelde tıklamayı kaybedeceksiniz.
Örnek burada: http://jsfiddle.net/ppkzS/1/
SandBox olmadan örnek: http://jsfiddle.net/ppkzS/
