SRI 校验什么
子资源完整性(SRI)通过在 script 与 link 标签上声明资源内容的哈希值,让浏览器在加载第三方 CDN 资源时校验内容是否被篡改。检查点是:关键外部脚本与样式是否配置了完整性属性与跨域属性。需要注意的是 SRI 对动态注入的脚本无效,也不能覆盖接口返回的数据本身,因此它与内容安全策略是互补关系。
基本信息
| 适用平台 | 所有引用第三方 CDN 资源的 Web 前端 |
|---|---|
| 检查属性 | 完整性(integrity)与跨域(crossorigin) |
| 哈希算法 | 常见 sha256、sha384、sha512 |
| 失败行为 | 校验不一致时浏览器拒绝执行该资源 |
典型使用场景
- 第三方脚本供应链风险盘点
- 排查历史上 CDN 被篡改类安全事件的相关入口
- 前端资源治理中区分本地托管与外部引用
- 上线前检查关键脚本的完整性配置
- 为 CSP 与资源治理方案提供现状清单
检查方式
检查方式
1. 抓取页面外部资源引用清单,区分自有域与第三方域
2. 核对 script 与 link 标签是否带完整性属性与跨域属性
3. 记录缺失 SRI 的资源、来源域名与其加载顺序(是否阻塞首屏)
4. 评估第三方资源是否频繁更新(频繁更新会带来维护成本)
5. 输出:缺失清单 + 修复建议(本地托管或加 SRI 并锁定版本)+ 配合 CSP 的加固建议检查点与判据
| 检查点 | 安全实现 | 风险表现 |
|---|---|---|
| 完整性属性 | 关键脚本与样式均配置哈希 | 第三方脚本无校验 |
| 跨域属性 | 与完整性属性配套设置 | 缺失导致校验直接失败 |
| 版本锁定 | 引用固定版本地址 | 引用最新版本地址 |
| 动态注入 | 改由 CSP 管控 | 运行时注入资源不受 SRI 覆盖 |
| 降级处理 | 校验失败有明确提示 | 校验失败导致页面功能异常 |
给频繁更新的资源加 SRI 会导致线上白屏:资源每次更新哈希都要同步修改页面引用,因此更稳妥的做法是关键脚本本地托管,非关键第三方资源再加 SRI。
SRI 与内容安全策略配合使用更完整:SRI 保证资源内容未被篡改,策略限制资源加载来源,两者分别覆盖内容与来源两个维度。