1. Apakah dasar asal yang sama
Untuk memahami merentas domain, anda mesti memahami dasar asal yang sama terlebih dahulu. Dasar Asal Yang Sama ialah dasar keselamatan yang sangat penting yang dilaksanakan pada penyemak imbas atas sebab keselamatan.
Apakah asal usul yang sama:
URL terdiri daripada protokol, nama domain, port dan laluan Jika protokol, nama domain dan port dua URL adalah sama, bermakna ia mempunyai asal yang sama.
Dasar 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. (Topi putih bercakap tentang keselamatan web [1])
Skrip yang dimuatkan dari satu domain tidak dibenarkan untuk mengakses sifat dokumen domain lain.
Contohnya:
Contohnya, halaman tapak web berniat jahat membenamkan halaman log masuk bank melalui iframe (dua sumber adalah berbeza jika tiada sekatan asal, skrip JavaScript pada halaman web berniat jahat boleh mendapatkan nama pengguna dan kata laluan apabila pengguna log masuk ke bank.
Dalam penyemak imbas, teg seperti
Selain itu, dasar asal yang sama hanya mengehadkan dokumen HTML halaman web dan sumber statik lain yang dimuatkan seperti javascript, css, imej, dll. masih dianggap milik asal yang sama.
Contoh kod (http://localhost:8080/ dan http://localhost:8081 mempunyai sumber yang berbeza disebabkan oleh port yang berbeza):
http://localhost:8080/test.html <html> <head><title>test same origin policy</title></head> <body> <iframe id="test" src="http://localhost:8081/test2.html"></iframe> <script type="text/javascript"> document.getElementById("test").contentDocument.body.innerHTML = "write somthing"; </script> </body> </html> http://localhost:8081/test2.html <html> <head><title>test same origin policy</title></head> <body> Testing. </body> </html>
在Firefox中会得到如下错误:
Error: Permission denied to access property 'body'
Document对象的domain属性存放着装载文档的服务器的主机名,可以设置它。
例如来自"blog.csdn.net"和来自"bbs.csdn.net"的页面,都将document.domain设置为"csdn.net",则来自两个子域名的脚本即可相互访问。
出于安全的考虑,不能设置为其他主domain,比如http://www.csdn.net/不能设置为sina.com
2. Ajax跨域
Ajax (XMLHttpRequest)请求受到同源策略的限制。
Ajax通过XMLHttpRequest能够与远程的服务器进行信息交互,另外XMLHttpRequest是一个纯粹的Javascript对象,这样的交互过程,是在后台进行的,用户不易察觉。
因此,XMLHTTP实际上已经突破了原有的Javascript的安全限制。
举个例子:
假设某网站引用了其它站点的javascript,这个站点被compromise并在javascript中加入获取用户输入并通过ajax提交给其他站点,这样就可以源源不断收集信息。
或者某网站因为存在漏洞导致XSS注入了javascript脚本,这个脚本就可以通过ajax获取用户信息并通过ajax提交给其他站点,这样就可以源源不断收集信息。
如果我们又想利用XMLHTTP的无刷新异步交互能力,又不愿意公然突破Javascript的安全策略,可以选择的方案就是给XMLHTTP加上严格的同源限制。
这样的安全策略,很类似于Applet的安全策略。IFrame的限制还仅仅是不能访问跨域HTMLDOM中的数据,而XMLHTTP则根本上限制了跨域请求的提交。(实际上下面提到了CORS已经放宽了限制)
随着Ajax技术和网络服务的发展,对跨域的要求也越来越强烈。下面介绍Ajax的跨域技术。
2.1 JSONP
JSONP技术实际和Ajax没有关系。我们知道