话说js为什么要限制跨域访问?

开元中国2015 发布于 2015/03/29 20:39
阅读 6K+
收藏 1
不知js为什么禁止跨区,像PHP不是用直接file_get_contents吗,想获取任意页面都可以
加载中
1
eechen
eechen
在Firebug控制台中运行
$.ajax('http://www.baidu.com/');
请求会被Firefox阻止并提示:
已阻止交叉源请求:同源策略不允许读取 http://www.baidu.com/ 上的远程资源。可以将资源移动到相同的域名上或者启用 CORS 来解决这个问题。

由于浏览器实现的同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源,所以AJAX是不允许跨域的。不过 像<script>,<link>,<img>,<iframe>这些标签是允许跨域的,但你并不能修 改这些资源,比如iframe里的内容。

为什么浏览器要实现同源限制?我们举例说明:
比如一个黑客,他利用iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名和密码登录时,如果没有同源限制,他的页面就可以通过 JavaScript读取到你的表单中输入的内容,这样用户名和密码就轻松到手了.又比如你登录了OSC,同时浏览了恶意网站,如果没有同源限制,该恶意 网站就可以构造AJAX请求频繁在OSC发广告帖.
eechen
eechen
回复 @开元中国2015 : 浏览器厂商一般都不会故意的,除非他们不想干了.但可能会因为代码问题导致漏洞,比如乌云报告的UC的跨域漏洞 http://www.wooyun.org/bugs/wooyun-2014-075143
开元中国2015
开元中国2015
这么一说恍然大悟啊,这么说这个限制的把关在浏览器?那假如有一些不厚道的人开发一个浏览器,他不限制跨域访问的话这些漏洞怎么堵呢?
0
eechen
eechen
可以这样实现跨域,前端页面用AJAX请求本站的PHP文件,本站的PHP文件用file_get_contents('http://www.baidu.com/')获取资源后返回给前端JavaScript处理.
开元中国2015
开元中国2015
明白了,多谢解答啊,总算了解这个问题了,马不停蹄的整理了下来, http://www.lai18.com/content/407150.html 十分感谢!
eechen
eechen
如果你可以修改跨域的服务器端的话,你还可以使用JSONP和CORS(Cross-Origin Resource Sharing)来实现跨域.
返回顶部
顶部