首页 > 网页制作 >HTML怎么做SRI校验_html Subresource Integrity校验方法【精选】

HTML怎么做SRI校验_html Subresource Integrity校验方法【精选】

来源:互联网 2026-04-17 20:42:32

Subresource Integrity:不是加了就生效的安全开关 开门见山,先说核心结论:很多人以为给资源加上 integrity 属性就万事大吉,仿佛开启了一个自动安全开关。但现实是,如果漏配了 crossorigin、用本地文件计算哈希,或者CDN返回了非标准响应体,校验都会静默失效——最糟

Subresource Integrity:不是加了就生效的安全开关

HTML怎么做SRI校验_html Subresource Integrity校验方法【精选】

开门见山,先说核心结论:很多人以为给资源加上 integrity 属性就万事大吉,仿佛开启了一个自动安全开关。但现实是,如果漏配了 crossorigin、用本地文件计算哈希,或者CDN返回了非标准响应体,校验都会静默失效——最糟糕的是,页面白屏了,控制台却可能连个像样的错误提示都没有。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

为什么 integrity 加了,却不报错也不拦截?

最常见的原因,是缺少了 crossorigin 属性。这里有个关键机制:浏览器一旦发现 integrity,就会强制对该资源发起CORS(跨源资源共享)请求。但如果资源服务器没有返回正确的 Access-Control-Allow-Origin 头,或者开发者没有显式声明 crossorigin,浏览器就拿不到完整的响应体进行比对,哈希校验流程压根不会启动,integrity 属性也就被直接忽略了。

  • 黄金搭档integritycrossorigin 必须同时存在,缺一不可。
  • crossorigin="anonymous":适用于绝大多数公开CDN(如 cdn.jsdelivr.net、code.jquery.com)。
  • crossorigin="use-credentials":仅当你的后端要求携带登录态(如Cookie)访问静态资源时才使用,并且后端必须配合返回 Access-Control-Allow-Credentials: true 以及明确的 Access-Control-Allow-Origin(不能是通配符 *)。
  • 静默的陷阱:控制台不会友好地警告你“crossorigin 缺失”,它只会安静地跳过校验,让你误以为一切正常。

哈希值从哪来?千万别用本地文件计算

哈希值必须基于目标URL实际返回的响应体来计算。这可不是你本地下载的.js文件,也不是HTML源码里内联的内容。CDN可能返回gzip压缩后的内容、带BOM头的UTF-8编码、或者经过重定向后的最终资源——这些细微差别都会导致哈希值对不上。

  • 推荐命令curl -sL https://cdn.example.com/jquery.min.js | openssl dgst -sha384 -binary | openssl base64 -A
  • 命令解析:-sL 参数确保curl跟随重定向并静默输出;openssl 默认对解压后的明文内容进行哈希(这与浏览器的行为保持一致)。
  • 在线生成器(如 https://www.srihash.org/)本质也是调用curl+计算哈希,但无法控制重定向和编码细节,一旦出问题,排查起来更困难。
  • 如果资源服务器启用了Brotli压缩,curl 默认不会处理,但浏览器校验的始终是解压后的明文。因此,上述命令依然适用。

哪些标签支持SRI?哪些不支持?

SRI规范目前只作用于