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-forms form gönderimine izin ver
  • allow-popups açılır pencerelere izin verir
  • allow-pointer-lock işaretçi kilidine izin verir
  • allow-same-origin belgenin kaynağını korumasına izin verir
  • allow-scripts JavaScript yürütülmesine izin verir ve ayrıca özelliklerin otomatik olarak tetiklenmesine de izin verir
  • allow-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/

İlgili makaleler