Beberapa situs web memiliki kode untuk "keluar" dari IFRAME
lampiran, yang berarti bahwa jika halaman A
dimuat sebagai bagian IFRAME
dalam halaman induk, P
beberapa Javascript di akan A
mengarahkan ulang jendela luar ke A
.
Biasanya Javascript ini terlihat seperti ini:
<script type="text/javascript">
if (top.location.href != self.location.href)
top.location.href = self.location.href;
</script>
Pertanyaan saya adalah: Sebagai penulis halaman induk P
dan bukan penulis halaman dalam A
, bagaimana saya bisa mencegah A
dari melakukan break-out ini?
PS Bagi saya sepertinya itu seharusnya merupakan pelanggaran keamanan lintas-situs, tetapi tidak.
javascript
html
iframe
Jason Cohen
sumber
sumber
Jawaban:
Coba gunakan properti onbeforeunload, yang akan memungkinkan pengguna memilih apakah dia ingin bernavigasi menjauh dari halaman.
Contoh: https://developer.mozilla.org/en-US/docs/Web/API/Window.onbeforeunload
Di HTML5 Anda dapat menggunakan properti kotak pasir. Silakan lihat jawaban Pankrat di bawah ini. http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/
sumber
postMessage
. Ini bukan risiko keamanan, tetapi seseorang mungkin ingin tahu bahwa kemampuan ini ada ketika mereka melihat komentar Anda. :)sandbox
.Dengan HTML5, atribut sandbox iframe telah ditambahkan. Pada saat penulisan ini berfungsi pada Chrome, Safari, Firefox, dan versi terbaru dari IE dan Opera tetapi cukup banyak melakukan apa yang Anda inginkan:
Jika Anda ingin mengizinkan pengalihan tingkat atas, tentukan
sandbox="allow-top-navigation"
.sumber
sandbox
tidak mengizinkan Flash atau objek jenis lain apa pun dalam bingkai berpasir, membuatsandbox
fitur tersebut tidak berguna dalam banyak kasus.Saya menggunakan kotak pasir = "..."
Navigasi teratas adalah apa yang ingin Anda cegah, jadi tinggalkan itu dan itu tidak akan diizinkan. Apa pun yang ditinggalkan akan diblokir
ex.
sumber
Setelah membaca spesifikasi w3.org . Saya menemukan properti kotak pasir.
Anda dapat mengatur
sandbox=""
, yang mencegah iframe dari redirect. Itu dikatakan tidak akan mengarahkan ulang iframe juga. Anda akan kehilangan klik pada dasarnya.Contoh di sini: http://jsfiddle.net/ppkzS/1/
Contoh tanpa sandbox: http://jsfiddle.net/ppkzS/
sumber
Saya tahu ini sudah lama sejak pertanyaan dilakukan tetapi di sini adalah versi perbaikan saya akan menunggu 500ms untuk panggilan berikutnya hanya ketika iframe dimuat.
dan
onload="frameLoad()"
danonreadystatechange="frameLoad();"
harus ditambahkan ke bingkai atau iframe.sumber
Saya telah menemukan beberapa peretasan yang bermanfaat untuk ini:
Dengan menggunakan JS bagaimana saya bisa menghentikan iframe anak dari pengalihan atau setidaknya meminta pengguna tentang pengalihan
http://www.codinghorror.com/blog/2009/06/we-done-been-framed.html
http://coderrr.wordpress.com/2009/02/13/preventing-frame-busting-and-click-jacking-ui-redressing/
sumber
Karena halaman yang Anda muat di dalam iframe dapat mengeksekusi kode "break out" dengan setInterval, onbeforeunload mungkin tidak sepraktis itu, karena itu dapat membuat pengguna bingung dengan 'Apakah Anda yakin ingin keluar?' dialog.
Ada juga atribut keamanan iframe yang hanya berfungsi di IE & Opera
:(
sumber
Dalam kasus saya, saya ingin pengguna mengunjungi halaman dalam sehingga server akan melihat ip mereka sebagai pengunjung. Jika saya menggunakan teknik proxy php saya pikir bahwa halaman dalam akan melihat server ip saya sebagai pengunjung sehingga tidak baik. Satu-satunya solusi yang saya dapatkan sejauh ini adalah onbeforeunload. Letakkan ini di halaman Anda:
Ini berfungsi baik di firefox dan ie, itulah yang saya uji. Anda akan menemukan versi menggunakan sesuatu seperti evt.return (apa pun) omong kosong ... yang tidak berfungsi di firefox.
sumber
Dengan melakukannya, Anda akan dapat mengontrol tindakan apa pun dari halaman berbingkai, yang tidak dapat Anda lakukan. Kebijakan asal domain yang sama berlaku.
sumber