同源策略禁止读取位于_浏览器同源策略

4a8b72c8b1cf203ab7a40e8b6780997f.png

同源策略是浏览器安全的基石,它限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互,本文主要介绍同源策略的各个方面。

概述

1995年,同源策略由Netscape公司引入浏览器,目前所有的浏览器都实行这个策略。

定义

同源指的是一下相同:

  • 协议相同:同为http或https
  • 域名相同
  • 端口相同

约束

  • 允许跨域写操作(Cross-origin writes)。例如链接,重定向以及表单提交。特定少数的HTTP请求需要添加preflight。
  • 允许跨域资源嵌入(Cross-origin embedding)。
  • 不允许跨域读操作(Cross-origin reads)。

以下是可能嵌入跨源的资源的一些示例:

  • <script src="..."></script> 标签嵌入跨域脚本
  • <link rel="stylesheet" href="..."> 标签嵌入CSS
  • <img>嵌入图片。支持的图片格式包括PNG,JPEG,GIF,BMP,SVG,...
  • <video><audio>嵌入多媒体资源
  • <object>, <embed><applet> 的插件
  • @font-face 引入的字体。一些浏览器允许跨域字体( cross-origin fonts),一些需要同源字体(same-origin fonts)
  • <frame><iframe> 载入的任何资源。站点可以使用X-Frame-Options消息头来阻止这种形式的跨域交互。

跨源数据存储访问

不同源,以下行为会收到限制:

  • Cookie,localStorage, IndexedDB无法读取
  • DOM无法获得
  • Ajax请求发送后被浏览器拦截(并不一定是浏览器限制了发起跨站请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了)

注:不管使用哪个协议(HTTP/HTTPS)或端口号,浏览器都允许给定的域以及其任何子域名(sub-domains) 访问 cookie。设置 cookie 时,你可以使用Domain,Path,Secure,和Http-Only标记来限定其访问性。

跨源脚本API访问

Javascript的APIs中,如 iframe.contentWindow, window.parent, window.openwindow.opener 允许文档间直接相互引用。当两个文档的源不同时,这些引用方式将对 Window 和 Location对象的访问添加限制。

Window

允许以下对 Window 属性的跨源访问:

方法window.blurwindow.closewindow.focuswindow.postMessage

属性 window.closed.window.frames.window.length.window.location.window.opener.window.parent.window.self.window.top.window.window

Location

允许以下对 Location 属性的跨源访问:

方法location.replace

属性 URLUtils.href只写.

如何允许跨源访问

参考整理的另一篇文章 跨域方式

参考

https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy

http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值