Chrome:将禁用修改document.domain以放宽同源策略

2023-10-26

你好,我是tiantian。

几天前,Chrome developer 博客发布了这么一篇文章:

c20e04261ed5487f62de1eef1437345e.png

大致意思是,Chrome未来将禁用修改document.domain,如果你的网站依赖于设置document.domain 来解决跨域的问题,那么你可能需要注意了。

而且Chrome计划从 Chrome 101 开始使 document.domain 不可变,也就是说如果你是依赖于这种方式放宽同源策略的话,你的站点可能受到影响。

domain

根据MDN的定义如下:

Document接口domain属性获取/设置当前文档的原始域部分,常常用于同源策略

要了解有关设置document.domain 的安全含义的更多信息,请阅读 MDN :

https://developer.mozilla.org/zh-CN/docs/Web/API/Document/domain#setter

同源策略:保证一个网页不能访问(修改或提取数据)另一个页面,除非这些页面托管在同一源上。为了解决很多跨域间的通信问题,许多的网站会通过设置document.domain来达到目的。

例如,user1.example.com 和 user2.example.com之间是不能相互访问的,为了实现这种跨域访问,通过将 document.domain 设置为其公共域后缀,它们可以相互授予访问权限。

使用率

跨域的方案有很多种,使用这种方式来放宽同源策略的,有多少站点呢?

在 2020-12-01 HTTP Archive 语料库中,我们看到 7038 个页面(在 7,849,064 中:0.09%)的行为受到 document.domain 的影响。

比如阿里巴巴在 *.alibaba.com 域(即 https://baominhjsc.trustpass.alibaba.com/)上运行店面,这些域依赖 document.domain 与来自 onetalk.alibaba.com 的域进行通信。

再比如qq.com 有大约 110 个子域,它们依赖于 document.domain 与 apps.game.qq.com 等框架通信登录状态。

所以对于我们开发人员来说,未来真的禁用了document.domain,我们应该怎么做呢?

新的提案

Origin-Agent-Cluster http 标头(规范) 允许页面请求被源(而不是站点)隔离。如果设置为 true ( Origin-Agent-Cluster: ?1 ),则要求浏览器按来源隔离页面。如果为假,则按站点。(Agent Cluster 是隔离组的规范。由于低级隔离在 API 层不可见,规范只是粗略地触及主题。)

详细的解读:

  • Origin-Agent-Cluster: 标头在存在时将继续像当前一样工作。当标头不存在时,将更改的是默认值。

  • 当页面分配给 document.domain 但未设置 Origin-Agent-Cluster: ?0 标头时,我们将实施控制台警告。

所以未来有这么一种可能:通过 document.domain 放宽同源策略的唯一方法是发送一个 Origin-Agent-Cluster: ?0 标头。

可能还有一个比较疑惑的问题,谁需要设置 Origin-Agent-Cluster 标头

个人觉得,任何一个希望设置 document.domain 来达到跨域通信的页面,都需要通过发送 Origin-Agent-Cluster: ?0 来选择加入该功能。

浏览器兼容性

对于这项工作的开放,The Origin specification 规范声明该功能应该被删除

2369b7ed609ecf6b0882a66675e4a90c.png

主要意思是强调避免使用 document.domain,它会破坏了同源策略提供的安全保护。出于这些安全隐患,此功能正在从 Web 平台中删除。(这是一个漫长的过程,需要很多年。)

WebKit 表示他们对弃用 document.domain 持适度的积极态度。需要围观他们的讨论,可以阅读以下:

https://github.com/w3ctag/design-reviews/issues/564#issuecomment-768450217

小结

未来是否会禁用document.domain这种方式来放宽同源策略,这个过程应该很漫长。对于开发人员来说,我们可以通过设置 Origin-Agent-Cluster http 标头来过渡。至于最后的方案如何,我们值得期待。

参考

  1. https://developer.mozilla.org/zh-CN/docs/Web/API/Document/domain#setter

  2. https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

  3. https://developer.chrome.com/blog/immutable-document-domain/

  4. https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage

  5. https://github.com/mikewest/deprecating-document-domain/

  6. https://github.com/mikewest/deprecating-document-domain/

  7. https://github.com/mikewest/deprecating-document-domain/blob/main/2020-12-document-domain-usage.csv

  8. https://html.spec.whatwg.org/multipage/origin.html

  9. https://github.com/w3ctag/design-reviews/issues/564#issuecomment-768450217

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

Chrome:将禁用修改document.domain以放宽同源策略 的相关文章

  • WebGL:enablevertexattribarray索引超出范围

    这是我的顶点和片段着色器
  • Checkstyle 规则防止调用某些方法和构造函数

    是否可以使用 Checkstyle 来禁止使用某些使用系统相关默认值 区域设置 字符集等 的构造函数或方法 我更喜欢强制执行一项政策 程序员应该明确了解系统相关的值 所以我认为以下物品是危险的 all the constructors of
  • 动态元素 ID 到 setId(int) - Android

    我看到了语法定义setId int and findViewByID int 但我们如何使用findViewById R id row1 我尝试使用这个 Object1 setId Integer parseInt repeat 它没有显示
  • Jquery - 自动计算输入字段

    我正在尝试使下面的代码正常工作 我非常感谢您的帮助 基本上它是计算三个输入字段的总和 然后与其他两个字段相乘 最终结果应显示在输入字段 pcamount 中 这是 jsFiddle 中的示例 http jsfiddle net D98PW
  • Swing 是否支持 Windows 7 风格的文件选择器?

    我刚刚添加了一个标准 打开文件 与我正在编写的一个小型桌面应用程序的对话 基于JFileChooserSwing 教程的入口 http download oracle com javase tutorial uiswing componen
  • Selenium 2:中断页面加载

    我在使用 FirefoxDriver 使用 Selenium 2 0b3 Java API 单击按钮时遇到问题 单击该按钮会将表单发送到网络服务器 然后浏览器会因表单提交而进入新页面 当使用 element click 单击某个元素时 se
  • GitHub v3 API - 如何在存储库中创建初始提交?

    我正在使用 v3 API 并设法列出存储库 树 分支 访问文件内容并创建 blob 树 提交 我现在正在尝试创建一个新的存储库 并设法使用 POST user repos 来完成它 但是当我尝试在这个新存储库中创建 blob trees c
  • XmlAdapter 到 JAXB 绑定 Joda 的时间间隔?

    我已经被 Web 服务的 JAXB 绑定问题困扰了几个小时 为了准备一个必须返回 Joda Time 类实例 即时 持续时间 间隔等 的更大的 Web 服务 我从一个只有一个返回 Interval 的方法的 Web 服务开始 package
  • 如何设置 Eclipse 以停止发生异常的线路?

    如何设置 Eclipse 在发生异常时停止 我有一个 Eclipse 断点设置来在异常时中断 在下面的代码示例中 我遇到的问题是 Eclipse 尝试打开 Integer 源代码 有没有办法让调试器在我的代码示例中显示的位置中断 如果我向下
  • 当从搜索表单动态构建 WHERE 子句时,如何防止 SQL 注入?

    我知道在 Java 中保护 SQL 查询免受 SQL 注入的唯一真正正确的方法是使用准备好的语句 然而 这样的语句要求基本结构 选择的属性 连接的表 WHERE条件的结构 不会改变 我这里有一个 JSP 应用程序 其中包含一个带有大约十几个
  • 如何将 Java 字节数组转换为 Scala 字节数组?

    我是 Scala 新手 目前正在从事一个涉及 Java 和 Scala 模块的项目 现在我想使用 byte 类型的参数从 Java 调用 Scala 方法 Scala 方法的签名为 def foo data Array Byte Java
  • 函数 isAssignableFrom 在服务器启动期间返回 false

    实施oauth2系统 我在使用以下代码时遇到一些问题 import org springframework security oauth2 provider endpoint FrameworkEndpointHandlerMapping
  • 在 JavaScript onClick 事件处理程序中转义双引号

    下面的简单代码块可以在静态 HTML 页面中提供 但会导致 JavaScript 错误 您应该如何转义中嵌入的双引号onClick处理程序 即 xyz 请注意 HTML 是通过从数据库中提取数据动态生成的 其中的数据是其他可能带有单引号或双
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • Spring JPA (Hibernate) Entity Manager 何时将连接返回到连接池?

    在我的 java 进程中 我使用以下 spring 配置连接到 MySql Configuration EnableTransactionManagement PropertySources PropertySource classpath
  • java中类的命名约定 - 全部大写

    在 Java 中 当类全部大写时 如何命名它 例如 如果我想创建一个班级来选择某些人成为 VIP 我应该将类命名为 VIPSelector 还是 VipSelector Thanks 你的两个选择都有效 类的主要目标是让它们以大写字母开头
  • 如何在 JUnit5 中为测试套件设置自定义测试执行顺序?

    我在 JUnit5 上进行了大量测试 并在多个线程中并行运行 还有有关每次测试时间的信息 我想在最长的测试开始时运行 并将最快的测试留在最后以优化公共执行时间 我还没有找到在 JUnit5 中执行此操作的方法 版本中5 4有一个org ju
  • 遍历多行字符串

    我得到一些数据 def data some useless text n even more n finally interesting text 我怎样才能得到其中 有趣的部分 所以基本上所有行都不是以 开头的 Groovy 的一种选择是
  • 编写代码以:启动 R 会话、运行 R 脚本、终止会话、重复

    我正在寻找一种简单的 设置后就忘记它 的方式 无论是作为终端中的单个参数字符串还是简单的 Java 程序 来自动执行以下操作 1 启动R会话 2 告诉 R 源 R 文件包含冗长的并行模拟代码 3 完成后终止R会话 4 开始一个新的R会话 5
  • 错误:java.lang.NoSuchMethodError:org/springframework/asm/ClassVisitor.(I)V

    我的 POM 中有这两个依赖项 我认为这是造成此问题的原因 但我尝试了许多不同的方法和更新的版本 但没有任何效果对我有用 有人可以帮忙吗 XML文件

随机推荐

  • H5活动页面遇到的坑+微信分享代码

    h5活动页面功能 在手机上微信分享 1 上传两张图片 2 播放一个背景音乐 很简单是么 那说明你知道的太少了 其实里面的坑好多 一下是制作的心路历程 坑1 iphone上传照片的时候 因为有oriten的原因 所以传上去旋转了 坑2 安卓a
  • Linux rpm命令查询软件包(-q、-qa、-i、-p、-l、-f、-R)

    使用 rpm 做查询命令的格式如下 root localhost rpm 选项 查询对象 rpm q 查询软件包是否安装 用 rpm 查询软件包是否安装的命令格式为 root localhost rpm q 包名 q 表示查询 是 quer
  • 【wpf,C#】wpf调用winform的chart空间,把数据显示成表格曲线

    背景 用wpf想把数据在显示在图表 以一条曲线展示的时候 发现出了问题 wpf不像winform 直接就有chart控件 所以就花了点精力 学会了怎么调用chart控件 最终是为了把数据能够以图表曲线的形式展示出来 当然 wpf还有其他显示
  • IO数据流

    IO流主要是分为字节流和字符流 他们最大的区别是操作的数据单元不同 字节流操作的数据单元占8位 字符流操作的数据单元占16位
  • 【STM32】 工程

    WRITE IN FRONT 介绍 謓泽 正在路上朝着 攻城狮 方向 前进四 荣誉 2021 2022年度博客之星物联网与嵌入式开发TOP5 TOP4 2021 2022博客之星TOP100 TOP63 阿里云专家博主 掘金优秀创作者 全网
  • 线段树板子

    include
  • TreeMap 排序

    一 TreeMap TreeMap 默认排序规则 按照key的字典顺序来排序 升序 当然 也可以自定义排序规则 要实现Comparator接口 用法简单 先看下下面的demo public class SortDemo public sta
  • Java课题笔记~Element UI

    Element 是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库 用于快速构建网页 Element 提供了很多组件 组成网页的部件 供我们使用 例如 超链接 按钮 图片 表格等等 如下图左边的是我们编写页面看到的按钮 上图右边的
  • Redis3.0 集群搭建

    redis3 0 部仅提供了哨兵监控 热切换 还提供了集群解决方案 接下来简单的搭建redis3 0集群 1 新建三个redis server实例 我们可以将redis conf分别copy到7001 7002 7003的文件夹中 并修改相
  • easyui-datagrid获取行和列数据

    1 获取当前行 var row dg datagrid getSelected 2 获取所有选中行 var rows dg datagrid getSelections 3 获取所有行 var rows dg datagrid getRow
  • 安卓11上的存储权限问题

    这篇文章 想来发布的有些晚了 安卓11已经发布多时了 关于安卓11上的存储权限变更的文章数不胜数 所以这篇文章只做为自己的一个简单的记录吧 在说11之前 我们先回忆以下10上存储权限的变更 每个应用会生成自己对应的沙盒文件路径 自己的应用只
  • 计算机基础相关知识面试题

    之前写过一篇面试题 但是在春招面试 笔试问了很多计算机网络 数据结构 操作系统等相关知识点记点之前总结的还是不够参考的 再来一篇 顺序有点乱 但是每一个都是参考的 已备大家复习使用吧 文章目录 UDP 传输控制协议 和TCP 用户数据报协议
  • Redis——初识Redis

    Redis简介 Redis的数据结构致力于帮助用户解决问题 而不是像关系型数据库那样 要求用户扭曲问题来适应数据库 除此之外 通过复制 持久化和客户端分片 client side sharding 等特性 用户可以很方便的将Redis扩展成
  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(二十八)Gamma校正

    Vries的教程是我看过的最好的可编程管线OpenGL教程 没有之一 其原地址如下 https learnopengl cn github io 05 20Advanced 20Lighting 01 20Advanced 20Lighti
  • 编写一个golang websocket示例

    示例代码 创建一个websocket对象 var ws websocket Dial ws localhost 8000 echo http localhost 发送消息 if err ws Send byte hello world er
  • Latex编译中文出现的问题

    Latex编译中文出现的问题 记录一下使用latex编译中文遇到的一些问题 本文是在win11系统下使用的TexStudio MikTex组合 编译使用的是pdfLatex 编辑器的设置 首先会发现 编辑器中的中文字符全是乱码 这时 在Te
  • 应用于标签的伪类选择器(link、visited、active、hover)

    CSS3根据选择符的用途可以把选择器分为标签选择器 类选择器 ID选择器 全局选择器 组合选择器 继承选择器和伪类选择器等 伪类选择符定义的样式最常应用于 a 标签上 它表示4种不同的状态 link 未访问链接 visited 已访问链接
  • GnuWin32的安装与使用

    使用过Linux的伙计估计都会喜欢上linux各种各样强大的命令如 find vim cp mv wget curl grep ls等等 而GnuWin32使windows用户可以在命令行窗口中使用各种各样的linux命令 就跟使用普通的w
  • lighttpd不支持Expect: 100-continue的解决办法

    由于lighttpd1 4 21之前的版本不支持Expect 100 continue 所以有可能访问出现 HTTP 1 1 417 Expectation Failed 等错误提示 搜集整理了很多解决方法 如下 1 升级到 lighttp
  • Chrome:将禁用修改document.domain以放宽同源策略

    你好 我是tiantian 几天前 Chrome developer 博客发布了这么一篇文章 大致意思是 Chrome未来将禁用修改document domain 如果你的网站依赖于设置document domain 来解决跨域的问题 那么