子资源完整性实际上有什么帮助?

信息安全 网页浏览器 正直 验证 子资源完整性
2021-08-18 00:16:32

子资源完整性基本上让我知道我要下载的资源是有效的,因为其内容的哈希值符合我的预期。

但这假设我已经在一些受信任且经过验证的代码上运行。如果黑客入侵了服务资源的服务器,那么他们可以轻松地将根资源替换为他们自己的恶意代码的哈希值(或者完全绕过完整性检查)。

那么子资源完整性检查有什么帮助呢?客户将如何验证根资源?

2个回答

子资源完整性并不是要保护您自己的 Web 应用程序代码不被修改。从目标的描述可以看出 SRI 打算做什么

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

因此,它是关于保护您对位于不受您控制的站点的资源的使用。即使包含来自第三方站点的代码,SRI 也会交还一些控制权。它不提供可用性,但提供完整性,即防止第三方(或接管该方的某些黑客)进行不必要的修改。

假设您有一个围绕 jQuery 构建的网站。您无需下载 jQuery 并使用您的副本,而是使用来自 CDN 的版本,利用客户端浏览器上的缓存。这是因为如果一个站点使用 CDN 版本,它将被缓存,并且每个使用相同版本的站点都会受益,而不必每次都下载相同的文件。

有一天,有人侵入了 CDN 服务器,并用修改过的版本替换了 JavaScript 文件,这些修改过的版本将每次击键提交到攻击者的服务器某处。每个使用该脚本的站点都会受到影响,包括您的站点。

这里输入子资源完整性 - SRI它可以防止第三方在未检测到的情况下更改外部资源。如果您在外部资源上启用了 SRI,客户端浏览器将不会加载哈希不匹配的资源。

然后他们可以轻松地用自己的恶意代码的哈希替换根资源

并不真地。SRI 保护您的网站(您控制的代码)免受您无法控制的第三方脚本的更改。对您的代码的攻击不受 SRI 保护,因为如果攻击者更改第三方脚本您的站点,他可以做同样的事情,只更改您的站点,而麻烦更少。毕竟,攻击您的网站比攻击 Akamai、CloudFlare、Google 或 Microsoft 更容易。