代码改变世界

浏览器之同源策略

2014-08-24 20:12  hduhans  阅读(409)  评论(0)    收藏  举报

  浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。也就是说限制了“源”自A的脚本只能操作“同源”页面的DOM,跨源操作B的页面将被拒绝。所谓的同源,指的是host(域名或IP)子域名端口协议,所有相同才为同源。

  同源策略是浏览器的一向最基本的安全策略,是整个浏览器的安全体系的基础。若不存在同源策略,浏览器的安全将无从谈起。通过web服务器的session策略(参考《Session存储机制详解》)可以了解到,由于http是无状态的协议,浏览器会在用户登陆之后相同域发起的所有请求http头中添加sessionid,服务器根据sessionid才可判断用户是否已登录,然后进行操作。例如用户在同一浏览器打开了a.com与b.com,并且a.com已登录,毫无疑问,若访问a.com的某个页面如a.com/content.html,浏览器会带上a.com的sessionid,可顺利获取content.html页面内容。思考一下,若在b.com的某个页面中通过ajax发起对a.com/content.html的访问,你猜浏览器会带上哪个sessionid?结果是a.com的sessionid,这是极不安全的,由此诞生了同源策略,限制b.com的js访问不同源的资源路径a.com。

  但是互联网资源的的开放引用的需求,浏览器开放了<script><img><iframe><link>四个标签的特权,允许他们跨域加载资源。通过四个标签的src加载资源时,浏览器限制了javaScript的权限,使其不能读写返回的内容。