1. Strategi asal yang sama
Untuk memahami merentas domain, kita mesti mengetahui dasar asal yang sama dahulu. Baidu Encyclopedia mentakrifkan dasar asal yang sama seperti berikut: Dasar asal yang sama ialah konvensyen teras dan fungsi keselamatan paling asas bagi penyemak imbas Jika dasar asal yang sama tiada, fungsi normal penyemak imbas mungkin terjejas. Boleh dikatakan bahawa Web dibina berdasarkan dasar asal yang sama, dan penyemak imbas hanyalah pelaksanaan dasar asal yang sama.
Apakah asal yang sama: Jika nama domain, protokol dan port dua URL adalah sama, ini bermakna ia mempunyai asal yang sama.
Dasar asal yang sama penyemak imbas mengehadkan "dokumen" atau skrip daripada sumber yang berbeza daripada membaca atau menetapkan atribut tertentu pada "dokumen" semasa. (White hat bercakap tentang keselamatan web[1]). Menurut dasar ini, JavaScript di bawah nama domain a.com tidak boleh merentas domain mengendalikan objek di bawah nama domain b.com. Contohnya, kod JavaScript yang terkandung dalam halaman di bawah nama domain baidu.com tidak boleh mengakses kandungan halaman di bawah nama domain google.com.
JavaScript mesti mematuhi dasar asal yang sama pelayar, termasuk Ajax (sebenarnya, Ajax juga terdiri daripada JavaScript). Permintaan Ajax yang dilaksanakan melalui objek XMLHttpRequest tidak boleh diserahkan kepada domain yang berbeza Contohnya, halaman di bawah abc.test.com tidak boleh menyerahkan permintaan Ajax ke def.test.com. Dengan menggunakan dasar asal yang sama, pengguna boleh memastikan bahawa halaman yang mereka lihat sebenarnya berasal dari domain yang mereka semak imbas.
Strategi asal yang sama adalah sangat penting dalam aplikasi kehidupan sebenar. Andaikan bahawa penyerang menggunakan Iframe untuk membenamkan halaman log masuk bank sebenar pada halamannya Apabila pengguna log masuk dengan nama pengguna dan kata laluan sebenar, halaman itu boleh membaca kandungan borang pengguna melalui JavaScript, supaya maklumat nama pengguna dan kata laluan Ia. telah bocor.
Dalam penyemak imbas,
2. PostMessage melaksanakan merentas domain
Sintaks: window.postMessage(msg,targetOrigin)
tetingkap: merujuk kepada tetingkap sasaran, yang mungkin merupakan ahli window.frames property atau tetingkap yang dicipta oleh window.open method
mesej: mesej yang akan dihantar Spesifikasi html5 menyebut bahawa parameter ini boleh menjadi mana-mana jenis asas JavaScript atau objek boleh disalin Walau bagaimanapun, tidak semua penyemak imbas melakukan ini, dan sesetengah penyemak imbas hanya boleh memproses parameter String kita perlu menggunakan kaedah JSON.stringify() untuk menyerikan parameter objek apabila menghantar parameter Kesan serupa boleh dicapai dengan merujuk json2.js dalam versi IE yang lebih rendah
.targetOrigin: "Domain sasaran", termasuk: protokol, nama hos, nombor port. Jika dinyatakan sebagai "*", ia bermakna ia boleh dihantar ke mana-mana tetingkap jika dinyatakan sebagai "/", ia bermakna ia adalah tetingkap yang sama dengan tetingkap semasa.
Dapatkan mesej daripada postMessage: tambah acara onmessage ke halaman
Acara onmessage menerima parameter e, iaitu objek acara.
Beberapa sifat penting e:
1. data: msg dihantar melalui postMessage
2. Objek tetingkap untuk menghantar mesej
3. asal: sumber tetingkap mesej (nombor port hos protokol)
Mari tulis demo ringkas:
http://source.com/source.html digunakan untuk menghantar data:
http://target.com/target.html digunakan untuk menerima data:
运行结果如下:
点击发送按钮的时候,target.html将会受到发送的消息.
以上就是本文的全部内容,希望对大家的学习有所帮助.