为什么子资源完整性 (SRI) 仅限于某些文件?

信息安全 网页浏览器 html html-5 子资源完整性
2021-08-25 12:38:03

我对 Sub 资源完整性 (SRI) 功能非常感兴趣。但是,为什么它只限于 JS 和 CSS 文件呢?我试图固定一个 LESS(CSS 变体)文件,其中的完整性标签被 Firefox 和 Chrome 忽略。

此外,我了解 SRI 的主要设计目的是防止对托管在内容交付网络 (CDN) 等外部资源上的文件进行不必要的更改。但是既然我们都喜欢分层安全性,为什么不将它添加到所有浏览器包含的文件(甚至是自托管的)上呢?

即使您能够更改 JS 文件,也可能(但不确定)您也能够更改完整性标签。

1个回答

为什么仅限于 JS 和 CSS 资源?

但是,为什么它只限于 JS 和 CSS 文件呢?

W3C SRI 规范指出

此处指定的方案也适用于链接,本规范的未来版本可能会扩大此覆盖范围。

它还指出:

本规范的未来修订版可能包括对所有可能的子资源的完整性支持,即,a、音频、嵌入、iframe、img、链接、对象、脚本、源、轨道和视频元素。

看来这只是规范的第一个版本。github 存储库还包括一个里程碑,参考规范的第二版将解决的问题。例如,有一个关于添加添加下载完整性功能的 github 问题

我试图固定一个 LESS(CSS 变体)文件,其中的完整性标签被 Firefox 和 Chrome 忽略。

似乎他们严格遵守规范。第一个版本是关于添加linkscriptHTML 元素的完整性,但不是为每个属性添加完整性规范只提到处理integrity的属性link时元素rel="stylesheet"

每当用户代理尝试获取链接元素指向的资源时,该链接元素具有带有样式表关键字的 rel 属性

通过查看Less 网站,我们看到他们依赖link但 with rel="stylesheet/less",因此不是规范的一部分。

也许您可以在他们的 github 存储库中为第二个版本提交问题?

为什么受限于外部资源?

为什么不将它添加到所有浏览器包含的文件(甚至是自托管的)上?

通过查看规范,它似乎不是他们威胁模型的一部分。这是他们的第一个目标:

损害第三方服务不应自动意味着损害包括其脚本的每个站点。

可以假设,如果攻击者能够修改自托管 JavaScript 文件,它可能会做得更多。当然,这并不意味着攻击者可以修改 HTML 部分,但他们模型中的攻击者不能修改内部资源。