HTML怎么做SRI校验_html Subresource Integrity校验方法【精选】
Subresource Integrity:不是加了就生效的安全开关

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
开门见山,先说核心结论:许多开发者误以为为资源添加 integrity 属性就等同于开启了自动安全防护。然而现实情况是,如果遗漏配置 crossorigin 属性、使用本地文件计算哈希值,或者CDN返回了非标准响应体,SRI校验都可能静默失效——最糟糕的情况是,页面出现白屏,而浏览器控制台甚至可能没有任何明确的错误提示。
为什么添加了 integrity 属性,却不报错也不拦截资源?
最常见的原因,是缺少了关键的 crossorigin 属性。这里有一个核心机制:浏览器一旦检测到 integrity 属性,就会强制对该资源发起CORS(跨源资源共享)请求。但如果资源服务器没有返回正确的 Access-Control-Allow-Origin 响应头,或者开发者没有显式声明 crossorigin 属性,浏览器就无法获取完整的响应体进行比对,哈希校验流程根本不会启动,integrity 属性也就被直接忽略了。
- 黄金搭档:
integrity和crossorigin必须同时存在,缺一不可。 crossorigin="anonymous":适用于绝大多数公开CDN(例如 cdn.jsdelivr.net、code.jquery.com)。crossorigin="use-credentials":仅当你的后端要求携带登录态(如Cookie)访问静态资源时才使用,并且后端必须配合返回Access-Control-Allow-Credentials: true以及明确的Access-Control-Allow-Origin(不能使用通配符*)。- 静默的陷阱:控制台通常不会友好地提示“crossorigin 属性缺失”,它只会安静地跳过校验,让你误以为一切正常,从而埋下安全隐患。
哈希值从哪里获取?切勿使用本地文件进行计算
正确的SRI哈希值必须基于目标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命令默认不会处理,但浏览器校验的始终是解压后的明文。因此,上述命令依然适用。
哪些HTML标签支持SRI?哪些不支持?
当前的SRI规范仅作用于 和 这两类标签。其他所有资源加载方式都不受SRI保护。
立即学习“前端免费学习笔记(深入)”;
fetch()、XMLHttpRequest、import()动态导入:完全不识别integrity属性。- 通过
document.createElement('script')动态创建并设置src:即使手动添加integrity属性,浏览器也不会执行校验。 、、:均不支持,SRI规范尚未覆盖这些元素。- 校验失败时的表现:当SRI校验失败时,对应的脚本或样式表会被浏览器直接丢弃,且不会触发
onerror事件。控制台通常只会报一个模糊的错误:Failed to find a valid digest in the 'integrity' attribute,这时你需要逐个检查所有带有integrity属性的标签。
还有一个极易被忽略的细节:当页面存在多个带有 integrity 属性的 标签时,只要其中任何一个校验失败,对应的脚本就会彻底“消失”,并且没有自动的fallback(回退)机制。因此,在将代码部署到线上生产环境之前,务必使用真实的资源URL配合 curl 命令来验证哈希值,不要依赖本地文件或缓存副本的计算结果。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
metro ui 常见问题与处理办法汇总
认识 Metro UI 及其常见问题场景Metro UI,也被称为 Modern UI,是一种源自微软的设计语言,以其大胆的色块、简洁的排版和强调内容本身的风格而闻名。它最初随 Windows Phone 系统亮相,后来也影响了 Windows 8 等系统的界面设计。在前端开发领域,尤其是在构建具有
metro ui 是什么?基础说明与使用场景
深入解析 Metro UI 的设计哲学与核心理念 Metro UI,亦常被称为 Modern UI,是由微软公司开创并主导的一种革命性界面设计语言。其设计灵感直接来源于机场、地铁等公共交通系统中的导向标识,核心在于追求信息的极度清晰、直接和高效传达,真正实现以内容本身为中心。这一风格彻底摒弃了早期盛
HTML5中利用SharedArrayBuffer实现跨线程内存共享逻辑
SharedArrayBuffer:解锁多线程真正共享内存的钥匙 SharedArrayBuffer 是实现 Web 多线程编程中主线程与 Worker 线程间真正内存共享的核心 API。它需要配合 Atomics 对象进行同步操作,满足跨域隔离安全策略,并通过 postMessage 的 tran
如何修复 JWT 认证中空 Cookie 导致 Fetch 请求挂起的问题
如何修复 JWT 认证中空 Cookie 导致 Fetch 请求挂起的问题 在 JWT 身份验证场景中,若中间件未对请求是否携带有效的 token Cookie 进行前置校验,当客户端未发送 cookie 时,jwt verify() 的回调函数将不会执行,导致服务器响应无法发出,Fetch 请求陷
canvas3 用不好怎么办?问题排查指南
Canvas3 常见使用障碍与初步诊断Canvas3 作为现代前端开发中绘制复杂图形和动画的强大工具,其功能强大但学习曲线也相对陡峭。许多开发者在初次接触或深入使用时,常会遇到渲染异常、性能低下或交互失灵等问题。这些问题往往并非源于Canvas3本身存在缺陷,而是由于对其工作机制理解不足或使用方式不
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

