跨域iframe高度自适应_跨域(cross domain)

跨域

跨域问题的出现,是因为有浏览器同源策略的存在。

浏览器同源策略

其限制了从同一个源加载的文档或脚本如何与另一个源的资源进行交互,这个策略是一个仲要的安全机制,主要作用是用于隔离潜在的恶意文件。

同源

具有相同的协议,主机和端口(若指定)。

源的继承

在页面中使用 about:blank 或者 javascript: 的时候,URL执行的脚本会继承已经打开的URL的文档源,因为这类URLs没有明确包含有关原始服务器的源信息。例如: about:blank 通常作为父脚本写入内容的新建空白窗(通过Window.open()机制)。如果弹窗包含 javascript 代码,则这些代码继承于那些创建它的脚本相同的源。

IE例外:涉及到同源策略的时候IE主要有两个例外,一个是授权区间(两个相互之间高度互信的域名,例如公司域名,不遵守同源策略的限制),二是端口(IE未将端口号加入到同源策略的组成部分,因此端口号不同被认为是同源),这些例外是非标准的并且不被任何话浏览器支持

源的更改

document.domain语法

var domainString = document.domain;
document.domain = string;

页面因为一些限制缘故可能会更改它的源。 document.domain 脚本可用于设置其当前域名或者当前域的父域名的值,如果设置了当前域的父域名,则较短的父域名用于同源策略检测。

例如:在 http://store.company.com/dir/other.html 执行脚本 document.domain = "company.com"; 之后, http://company.com/dir/page.html 执行脚本 document.domain = "company.com";就可以通过同源检测,但是 company.com不能设置document.domain 为 othercompany.com,因为这不是 company.com的父域名。

端口号会被浏览器单独检测,任何对 document.domain的赋值,包括 document.domain=document.domain,都会导致端口号被重写为null。因此,其中一个带端口号的域名(http://company.com:8080)仅仅的设置 document.domain="http://company.com"; 不能与不带端口号的域名(http://company.com)进行通信。双方都必须对document.domain的赋值,以致于端口号都会变成null。

注意:当使用 document.domain允许一个子域名去安全地访问父域名的时候,需要将子域名和父域名两边的 document.domain设置为相同的值。即使都进行对document.domain赋值会将父域名单单的设置回原来的初始值,这也是很有必要的。如果不这么做可能会引起权限错误的问题。

跨源的网络访问

同源策略控制了不同源之间的交互,例如在使用 XMLHttpRequest 或者<img>元素标签的时候,这些交互一般会被分为三类:

  1. 允许跨源写操作,例如链接,重定向,表单提交,还有一些需要添加预检的HTTP请求。
  2. 允许跨源资源嵌入。
  3. 不允许跨源读操作,但通常可以通过内嵌来资源进行读操作,例如,可以读取内嵌图片的规模大小,内嵌脚本的路径(方法)。

以下是可能嵌入跨源的资源样式示例:

  • JavaScript的<script src="..."></script>标签,语法错误仅仅会在同源脚本中才会被检测
  • CSS的标签<link ref="stylesheet" href="...">
  • 图片标签<img>
  • 视频播放标签<audio>和<video>
  • 嵌入插件<object>,<embed>和<applet>
  • 字体@font-face,一些浏览器支持跨源一些支持同源
  • <frame>和<iframe>载入的任何资源。站点可以使用X-Frame-Options消息头来阻止这种跨源载入

CORS是HTTP的一部分,用于让服务器指定哪些主机是被允许从服务器加载资源的。

阻止跨域写操作

  1. 阻止跨源写操作,在请求中检测到一个不可测的token,通常被称为跨站伪造请求,必须依靠这个token来阻止跨源页面的读操作。
  2. 阻止跨源都区资源操作,确保这些资源是不可嵌入的。通常都有必要阻止嵌入,因为嵌入一个资源总是会泄露一些关于它的信息。
  3. 阻止跨源嵌入,确保你的资源不能是以上列出的可嵌入样式的任意一个,浏览器可能不会遵守Content-Type消息头。比如说:如果你在HTML文档中指定一个<script>标签,浏览器会尝试将HTML解析为JavaScript,当你的资源不是你站点的入口点,可以使用CSRF token来阻止嵌入

跨源脚本API访问

JavaScript的APIs中,例如:iframe.contentWindow , window.parent , window.open 和 window.opener , 允许所有文档相互间直接引用。当两个文档源没有相同的源的时候,这些引用将提供非常严格的访问方式给window和location的对象。

在不同源的两个文档对象要交互时,要使用window.postMessgae

详细请参照:

Same-origin policy​developer.mozilla.org
f9594f30fd69a79eaec3a9cbe701b762.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值