浏览器同源策略

2023-11-06

什么是同源?

如果两个 URL 的协议(protocol)、端口(port)、域名(host)都相同的话,则这两个 URL 是同源的。

下表给出了与 URL http://store.company.com/dir/page.html 的源进行对比的示例:

URL 结果 原因
http://store.company.com/dir2/other.html 同源 只有路径不同
http://store.company.com/dir/inner/another.html 同源 只有路径不同
https://store.company.com/secure.html 失败 协议不同
http://store.company.com:81/dir/etc.html 失败 端口不同(http:// 默认端口是 80)
http://news.company.com/dir/other.html 失败 主机不同

什么是同源策略?

同源策略是web安全策略,用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。这些交互分为三类:

  • 跨源写操作(Cross-origin writes)一般是被允许的。例如链接、重定向以及表单提交。特定少数的 HTTP 请求需要添加预检请求。
  • 跨源资源嵌入(Cross-origin embedding)一般是被允许的。例如:

        script  link  img  video  audio  object  embed  通过@font-face引入的字体(有些浏览器可以有          些不可以)  iframe(站点可以使用 X-Frame-Options 标头来阻止)

  • 跨源读操作(Cross-origin reads)一般是不被允许的

具体来讲,同源策略主要表现在DOM、Web数据、网络数据三个层面:

DOM层面。同源策略限制了来自不同源的JavaScript脚本对当前页面的DOM对象进行读写操作,从而防止跨域脚本篡改DOM结构。

Web数据层面。同源策略限制不同源的站点读取当前站点的Cookie、LocalStorage和IndexDB等数据,从而保障数据的安全性。

注意:cookie的限制不太一样,Cookie 中同源的定义,等价于不考虑 scheme 的同站(schemelessly same site)定义!Cookie 不提供根据 scheme 和 port 的隔离性。

默认情况下,Cookie 可以在 eTLD + 1 相同的站点间进行共享!

另外,服务端可以通过响应的 Set-Cookie Header,对 Cookie 的可用性进行设定,相关的属性包括 DomainPathSecure 等。

详情参考:Cookie 的同源和同站 - Alpha Hinex's Blog

Origin 和 Site - 简书

网络层面。同源策略限制了通过 XMLHttpRequest 等方式将站点的数据发送给不同源的站点。

为什么要有同源策略?

如果Web世界没有安全策略,那么我们的网站可以加载并执行别人任意的文件,这样的情况将会出现很多不可控的问题。

比如打开一个银行站点,然后又不小心打开了一个恶意站点,如果没有安全措施,恶意站点就可以做很多事情:

  • 修改银行站点的DOM、CSSOM等信息;
  • 在银行站点内插入恶意JavaScript脚本;
  • 劫持用户登录的用户名和密码;
  • 读取用户的Cookie、IndexDB等数据;

如何跨源访问?

1、CORS

跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain)上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域HTTP 请求。CORS需要浏览器和服务器同时支持,整个CORS过程都是浏览器完成的,无需用户参与。因此实现CORS的关键就是服务器,只要服务器实现了CORS请求,就可以跨源通信了。

优点

  • CORS 通信与同源的 AJAX 通信没有差别,代码完全一样,容易维护;
  • 支持所有类型的 HTTP 请求;

缺点

  • 存在兼容性问题,特别是 IE10 以下的浏览器;
  • 第一次发送非简单请求时会多一次请求。

2、JSONP

jsonp的原理就是利用script标签没有跨域限制,通过script标签src属性,发送带有callback参数的GET请求,服务端将接口返回数据拼凑到callback函数中,返回给浏览器,浏览器解析执行,从而前端拿到callback函数返回的数据。

缺点

  • 具有局限性, 仅支持get方法;
  • 不安全,可能会遭受XSS攻击。

3、PostMessage

解决问题:

  • 页面和其打开的新窗口的数据传递
  • 多窗口之间消息传递
  • 页面与嵌套的iframe消息传递
  • 上面三个场景的跨域数据传递

用法:

  • postMessage(data,origin)方法接受两个参数
  • data: html5规范支持任意基本类型或可复制的对象,但部分浏览器只支持字符串,所以传参时最好用JSON.stringify()序列化。
  • origin: 协议+主机+端口号,也可以设置为"*",表示可以传递给任意窗口,如果要指定和当前窗口同源的话设置为"/"。

4、nginx代理

nginx代理跨域,实质和CORS跨域原理一样,通过配置文件设置请求响应头Access-Control-Allow-Origin…等字段

参考:

浏览器的同源策略 - Web 安全 | MDN

浏览器同源策略 - 知乎

https://www.cnblogs.com/P1Kaj1uu/p/16815644.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浏览器同源策略 的相关文章

  • WordPress初学者入门教程-页面与文章

    本文源自 https wpeyes com wordpress 当你想要添加书面内容到你的网站 你有两个选择 你可以创建一个页面或一篇文章 在添加 编辑方面 这两者非常相似 但在功能上其实是相当不同的 对于刚接触WordPress的人 或者
  • vue3中使用ant-design-vue的layout组件实现动态导航栏功能(1~2级)

    目录 0 前言 1 准备工作 1 1 安装ant design vue 1 2 安装图标组件包 2 选择组件 3 路由文件 4 Vue导航页面 5 最终效果 0 前言 最近在自己搞一个前后端小项目 前端想使用ant design vue的l
  • 顶部导航栏的写法

    goodsType white space nowrap overflow x scroll webkit overflow scrolling touch padding 0 5rem 3 goodsTypeitem margin rig

随机推荐

  • 优化阶乘算法的探索

    优化阶乘算法的探索 中国地质大学 武汉 陈海丰 阶乘 factorial 是基斯顿 卡曼 Christian Kramp 1760 1826 于1808年发明的运算符号 阶乘 也是数学里的一种术语 是指从1乘以2乘以3乘以4一直乘到所要求的
  • 不看后悔的Linux内核Makefile文件详解

    好文章推荐 CSDNhttps mp csdn net mp blog creation editor 127774142 第一部分 概述 内容有点多 建议大家先收藏慢慢看哦 什么是makefile 或许很多Winodws的程序员都不知道这
  • linux中 mysql数据查询出来中文变问号的处理方法

    我们在linux里面 命令行查询数据库的时候 可能会遇到查询出来的中文是问号 如下图 这种情况一般是字符集编码的问题 show variables like character set 这个时候发现results的编码不是utf 8 cli
  • LaTex常用技巧5:公式太长换行并加大括号

    使用LaTex做笔记的时候发现公式太长 一行会超出页面 于是想到换行 原来的代码 这里使用了包bm 测试的时候前面请使用 usepackage bm begin equation i G bm a begin cases i i 1 ddo
  • SDIO的SPI模式驱动分析

    SPI模式由一个由基于闪存SD存储卡提供的次要通信协议组成 此模式是SD存储卡协议的子集 此接口在上电 CMD0 后的每一个复位命令期间被 选择 SPI标准只定义物理链接 而不提供数据传输协议 SD存储卡SPI执行利用SD存储卡协议和命令集
  • 2023第十四届蓝桥杯JavaA组真题

  • 关于java数组的扩容问题

    这是一个java数组实例 对一个顺序数组插入一个数 很明显直接插入是不行的 因为java中数组是固定的 不变是不能动态扩容的 想要插入一个数必然要重新创建一个数组 其长度比原数组大 然后对其进行拷贝 接下来要做的工作就是在新数组里面实现插入
  • 一次学校实训总结

    总结 前言 1 Linux基本命令 2 编程开发经验 3 一点MQTT协议的小知识点 4 学习中遇到的一些问题 5 遗忘的知识点与待解决的疑惑 写在后面的话 前言 好久不见 本来说好要更哈工大那一版的操作系统的 现在看来要食言了 正在准备考
  • 监听竖线一直在底部vue2

    要做一个竖线固定在固定区域上 占满固定区域的顶部到底部 固定区域会有滚动条 滚动条滚动的时候竖线要跟随吧变化 首先看看效果 解决办法 body代码 div class liebiao div style height 100 width 1
  • HPC超算初识思维导图

    HPC是高性能计算 High Performance Computing 机群的简称 指能够执行一般个人电脑无法处理的大资料量与高速运算的电脑 其基本组成组件与个人电脑的概念无太大差异 但规格与性能则强大许多 现有的超级计算机运算速度大都可
  • 如何用Redis实现搜索接口

    大家如果是做后端开发的 想必都实现过列表查询的接口 当然有的查询条件很简单 一条 SQL 就搞定了 但有的查询条件极其复杂 再加上库表中设计的各种不合理 导致查询接口特别难写 然后加班什么的就不用说了 不知各位有没有这种感受呢 下面以一个例
  • 华为公司经典设计规范合集

    下载链接 华为公司经典设计规范合集资源 CSDN文库 目录
  • Feature Selective Anchor-Free Module for Single-Shot Object Detection

    参考 Feature Selective Anchor Free Module for Single Shot Object Detection 云 社区 腾讯云 摘要 提出了一种简单有效的单阶段目标检测模块 特征选择无锚定 FSAF 模块
  • 数据库及SQL----常用知识点总结

    数据库也是计算机类笔试面试中不可避免会遇到的考点 尤其是银行和部分传统软件类公司 这里根据整理的资料 对数据库的相关知识也做个总结吧 希望学过数据库但长时间不用的同学根据这些知识能够回忆和重拾 没学过的同学能掌握一些数据库的基础知识 第一节
  • osgEarth的Rex引擎原理分析(四十六)如何定制椭球体并进行椭球体间坐标转换

    目标 目标 四十五 中的108 可以用于CGCS2000和WGS84的坐标转换 osg EllipsoidModel默认创建wgs84椭球体 将CGCS2000和WGS84的经纬高坐标分别转换为XYZ 然后比较其差值 osg Coordin
  • 重装mac显示未能恢复服务器取得联系,mac重开电脑后显示重装提示解决办法

    nodejs定义函数的方法 test 163 home exenode part3 module exports more calc js module exports sum function var r hdu 1789 Doing H
  • auto类型推导

    auto的作用 auto是我在编码中经常使用到的C 11新特性之一 主要用于变量的自动类型推导 如auto num 3 则推导出num的类型为int32 t auto的优势 相较于原始的显式类型去声明变量类型 auto的优势有以下几点 au
  • java全局异常捕获处理

    description TODO Author Administrator Date 2021 3 29 Version 1 0 ControllerAdvice public class YjzdyExceptionHandler Exc
  • Windows10电脑文件自动同步备份工具有哪些?

    对于工作中的重要数据人们一般都会有备份的习惯 但是如果都是人工手动复制粘贴 那效率会非常低下 Windows10中电脑文件自动同步备份工作有哪些 工具1 FileYee 推荐值 软件优势 可同百度网盘 移动硬盘实现自动同步备份 功能说明 F
  • 浏览器同源策略

    什么是同源 如果两个 URL 的协议 protocol 端口 port 域名 host 都相同的话 则这两个 URL 是同源的 下表给出了与 URL http store company com dir page html 的源进行对比的示