security web-security sri hash cdn frontend cybersecurity

使用子资源完整性 (SRI) 和 SRI 哈希计算器保障 Web 应用安全

保护您的网站免受第三方脚本漏洞的影响。了解如何实施子资源完整性 (SRI),并使用 SRI 哈希计算器为您在 CDN 上的资源生成安全的完整性哈希。

2026-04-16

使用子资源完整性 (SRI) 和 SRI 哈希计算器保障 Web 应用安全

在现代 Web 开发中,我们很少从零开始构建一切。我们依赖内容分发网络 (CDN) 来托管我们喜欢的库,如 React、Vue 或 Bootstrap。然而,这种依赖引入了一个风险:如果 CDN 被攻破,并且你加载的脚本被替换为恶意代码怎么办?

这就是子资源完整性 (SRI) 发挥作用的地方。本指南将解释 SRI 的工作原理,以及如何使用 SRI 哈希计算器来确保用户的安全。


1. 什么是子资源完整性 (SRI)?

子资源完整性 (SRI) 是一种安全功能,它允许浏览器验证其获取的资源(例如,从 CDN 获取的资源)在交付过程中没有经过意外的篡改。

工作原理

当你在 HTML 中包含资源时,你需要在 integrity 属性中提供该资源的加密哈希。然后浏览器会:

  1. 获取资源。
  2. 计算所获取资源的哈希值。
  3. 将其与你提供的哈希值进行比较。
  4. 如果匹配,则执行资源。如果不匹配,浏览器将阻止该资源。

HTML 语法

<script src="https://example.com/example-framework.js"
        integrity="sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcOtpguf4Dez6GdrJCT9Wo+SWax9fEE99l"
        crossorigin="anonymous"></script>

2. 使用 SRI 哈希计算器

要实施 SRI,你需要所加载文件的正确加密哈希。SRI 哈希计算器可以自动完成此过程。

SRI 常用的哈希算法

  • SHA-256:安全但哈希值略短。
  • SHA-384:SRI 最常用的推荐算法(兼顾安全性和长度)。
  • SHA-512:最安全,生成的哈希值较长。

生成 SRI 哈希的步骤

  1. 提供文件:上传脚本的本地版本或提供 CDN 资源的 URL。
  2. 选择算法:在 SHA-256、SHA-384 或 SHA-512 之间进行选择。
  3. 生成:该工具将生成一个以算法名称开头的字符串(例如,sha384-...)。
  4. 复制并粘贴:将生成的字符串插入脚本或链接标签的 integrity 属性中。

3. 为什么 SRI 对现代 Web 安全至关重要

防御 CDN 被攻破

即使大型 CDN 被黑,SRI 也能确保你的网站保持安全。恶意代码将无法匹配你的哈希,浏览器将直接拒绝运行它。

合规性与信任

使用 SRI 是 OWASP 等安全组织推荐的最佳实践。它向你的用户和客户证明你非常重视他们的数据安全。

防止“中间人”攻击 (MITM)

SRI 保护受损网络(如公共 Wi-Fi)上的用户免受可能尝试在流量中注入恶意代码的攻击者的侵害。


4. 排查 SRI 故障

如果你的资源无法加载,你可能会在控制台中看到如下错误消息: None of the "integrity" hashes in the "integrity" attribute match the content of the subresource.(“integrity”属性中的任何“integrity”哈希都不匹配子资源的内容。)

常见原因:

  • 哈希不正确:生成哈希时使用了错误版本的文件。
  • 缺少 crossorigin 属性:为了让 SRI 在跨域请求上工作,crossorigin="anonymous" 属性是必不可少的。
  • CDN 压缩:一些 CDN 可能会动态修改文件内容(如即时混淆或压缩),这会改变哈希值。请确保你哈希的对象与浏览器接收到的完全一致。

SRI 最佳实践摘要

行动 原因
使用 SHA-384 行业标准的性能与安全性平衡。
务必添加 crossorigin 跨站 SRI 验证所必需。
审计第三方脚本 仅对来自信誉良好来源且你信任的脚本使用 SRI。
自动生成哈希 使用 SRI 计算器以防止手动输入错误。

结论

子资源完整性是一种强大且低开销的方式,可以显著提高 Web 应用的安全性。通过将 SRI 哈希计算器作为部署过程的一部分,你可以保护你的网站和用户免受现代 Web 中最常见的攻击向量之一的侵害。


常见问题解答 (FAQ)

问:我可以对我自己的内部脚本使用 SRI 吗?

答: 可以,尽管这不如对第三方脚本那样关键。它仍可以作为构建过程中有用的完整性检查。

问:如果 CDN 更新了脚本版本会怎样?

答: 如果文件的内容发生了变化(哪怕只有一个字符),哈希值也会改变。每当你更新脚本版本时,都必须更新 integrity 属性。

问:SRI 会减慢页面加载速度吗?

答: 性能影响微乎其微。现代浏览器在处理脚本时会非常快速地计算哈希。