跨域之document.domain

3,456 阅读1分钟

前言

跨域:协议,域名,端口完全相同的两个地址,称为同域。其它的任何两个域名称为跨域。

eg: http:baidu.com/a.html 和http:baidu.com/b.html为同域;
       http:news.baidu.com 和 http:baidu.com 为跨域。

跨域的两个地址不能相互之间的访问有如下三点限制,这种限制叫同源策略。

限制
1. 不能访问操作DOM。比如通过openr访问操作另一个页面的DOM信息。

2. 不能访问资源。比如通过XMLHttpRequest或者fetch访问资源。

3. 不能访问cookie,stroage,indexDB等信息。


解释

document.domain可以显示得设置一个地址的域名,假如两个地址的协议,端口完全相同,则我们可以通过document.domain改变域名,来使得这两个url变为同源,从而达到跨域访问或者操作DOM,cookie等信息的目的。

但是document.domain的修改有两个限制:

    1. 只能设置为当前页面原有的domain,可就是不变。

    2. 只能设置为当前页面原有domain的上一级domain,并且设置的domain必须有‘.’;

举个例子:

http:news.baidu.com这个地址如果要修改域名,只能修改为‘news.baidu.com(满足第一条限制)’和‘baidu.com(满足第二条限制)’。而不能设置为'map.baidu.com'或者‘.com’等。

那有的朋友会问:那‘a.taobao.com’页面通过document.domain = 'taobao.com'之后,是否可以直接访问‘taobao.com’页面的资源?因为此时两个页面的domain是一样的,都是‘taobao.com’。答案是否定的。

因为如果可以的话,那任何域名的子级域名地址(a.taobao.com)都可以对父级(taobao.com)发起xss攻击。只有父子级都通过显示得设置document.domain = 'taobao.com',才能达到跨域访问资源的目的。


参考资料:

1. developer.mozilla.org/zh-CN/docs/…

2. developer.mozilla.org/zh-CN/docs/…