Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 1237

子资源完整性 (SRI)

审核人Cybersecurity entrepreneur & security researcher

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

子资源完整性 (SRI)浏览器在执行第三方加载的脚本或样式表前,先校验其加密哈希值的机制,防止被篡改的文件被运行。


子资源完整性于 2016 年被确立为 W3C 推荐标准,它通过在 scriptlink 标签上设置 integrity 属性来配置,属性值包含预期文件的一个或多个 base64 编码的 SHA-256/384/512 摘要。浏览器会下载资源、重新计算摘要,若没有任何一个列出的哈希与之匹配,便拒绝执行或应用该资源;以空格分隔的多个哈希可让页面接受多个已知良好的版本。由于 SRI 需要事先知道确切的字节内容,因此它保护的是静态、锁定版本的资源,而非动态生成的资源。

SRI 是抵御 CDN 被攻陷及第三方脚本(如 Magecart 家族)被劫持的首要客户端防线。Polyfill.io 攻击说明了它为何重要:2024 年 2 月,cdn.polyfill.io 域名被新的所有者收购后,该 CDN 开始投递将移动端用户重定向到诈骗网站的载荷——Sansec 于 2024 年 6 月 25 日发现此事,受影响的网站超过 10 万个(记录为 CVE-2024-38526)。任何锁定了 integrity 哈希的页面都会直接拦截这个被篡改的文件,因为其摘要已不再匹配。

SRI 与 CSP 及 crossorigin 属性协同工作,并应结合版本锁定以及构建流水线中自动化的哈希重新生成,使代码与摘要始终保持一致,不致脱节。

flowchart TD
  A["浏览器解析带有<br/>integrity 属性的标签"] --> B[从 CDN 获取资源]
  B --> C[计算 SHA-256/384/512 摘要]
  C --> D{摘要是否匹配<br/>某个列出的哈希?}
  D -->|是| E[执行 / 应用资源]
  D -->|否 — 被篡改或替换| F[拦截并抛出错误]

示例

  1. 01

    「<script src="https://cdn.example.com/lib.js" integrity="sha384-..." crossorigin="anonymous"></script>」。

  2. 02

    在受支持环境中使用 CSP 指令「require-sri-for script style」,强制所有子资源使用 SRI。

常见问题

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

浏览器在执行第三方加载的脚本或样式表前,先校验其加密哈希值的机制,防止被篡改的文件被运行。 它属于网络安全的 应用安全 分类。

子资源完整性 (SRI) 是什么意思?

浏览器在执行第三方加载的脚本或样式表前,先校验其加密哈希值的机制,防止被篡改的文件被运行。

如何防御 子资源完整性 (SRI)?

针对 子资源完整性 (SRI) 的防御通常结合技术控制与运营实践,详见上方完整定义。

子资源完整性 (SRI) 还有哪些其他名称?

常见的别称包括: SRI。

相关术语

另见