背景与价值SRI 通过资源哈希校验防止 CDN/镜像或传输环节被篡改;与 CSP 协同进一步收敛风险面。基本使用<link rel="stylesheet" href="https://cdn.example.com/app.min.css" integrity="sha384-BASE64" crossorigin="anonymous"> <script src="https://cdn.example.com/app.min.js" integrity="sha384-BASE64" crossorigin="anonymous"></script> 本域资源同样可用 SRI(版本固定)<script src="/assets/vendor.min.js?v=3.2.1" integrity="sha384-BASE64" crossorigin="anonymous"></script> 生成哈希(Node 示例)import { createHash } from 'crypto'; import { readFileSync } from 'fs'; function sri(path: string) { const buf = readFileSync(path); const h = createHash('sha384').update(buf).digest('base64'); return `sha384-${h}`; } CSP 协同Content-Security-Policy: script-src 'self' https://cdn.example.com; require-sri-for script style 指标验证(Chrome 128/Edge 130)供应链拦截率:非匹配资源被拦截 100%。失败占比:生产发布后因哈希不匹配导致失败 ≤ 0.2%(完善版本治理)。性能影响:SRI 校验对加载时间影响可忽略(P95)。设计要点版本与哈希绑定:任何改动需同步更新 SRI;构建产物采用内容哈希文件名更稳妥。第三方脚本:优先自托管或使用可信 CDN 并固定版本;开启 SRI 与 CSP `require-sri-for`。错误治理:接入监控记录 SRI 失败的 URL 与来源,快速定位异常供应链。回退策略旧浏览器不支持 SRI:仍受 CSP 限制;对关键脚本提供本地镜像与校验逻辑。测试清单修改资源后哈希不匹配应被阻止;发布流程自动生成并注入 SRI。CDN 宕机或被替换时,页面拒绝加载非可信版本并提示降级路径。

发表评论 取消回复