integrity属性仅校验浏览器加载的外部script或link资源在传输后是否被篡改,必须与crossorigin成对使用,且只支持SHA-256/384/512哈希,不适用于img、iframe等其他标签。

integrity 属性本身不验证「文件完整性」,它只在浏览器加载外部资源(如 CDN 上的 script 或 link)时,校验该资源传输后内容是否与预设哈希一致。它防的是中间人篡改、CDN 投毒或缓存污染,不是校验你本地上传的文件或磁盘上某个 HTML 文件有没有被改写。
integrity 只对 script 和 link 有效
- 浏览器强制限制:
integrity只被<script></script>(含type="module")和支持 - 其他标签加了也无效:比如
或完全被忽略 - 必须搭配
crossorigin:缺这个属性,浏览器直接跳过校验(哪怕integrity值合法) -
crossorigin="anonymous"是最常用值;若资源需带凭证(如 cookies),才用"use-credentials",但此时 CDN 必须返回Access-Control-Allow-Origin: *或明确域名
哈希怎么生成?别手算,用命令行或 API
- 推荐算法只有
SHA-256、SHA-384、SHA-512;SHA-1已被所有主流浏览器禁用 - 生成方式示例(以 jQuery CDN 文件为例):
curl -s https://code.jquery.com/jquery-3.7.1.min.js | openssl dgst -sha384 -binary | base64 -w0
- 输出类似:
sha384-9gV8QaKvDkHfGqEzZoYjCJF/9pXrUyZtL+R7eM8cAaBxTbWmIqYzOqZnVqQ== - 注意:必须用原始文件内容计算,不能对压缩后、BOM 前置、或带注释的版本算——否则哈希不匹配
常见失败原因:不是哈希错了,是流程断了
- 资源重定向未被跟踪:比如 CDN 返回 302 到另一个 URL,浏览器默认不继承
integrity校验(除非重定向响应头含Integrity,但极少支持) - 服务端自动 Gzip/Brotli 压缩但没配
Vary: Accept-Encoding:导致不同客户端拿到不同编码版本,哈希自然不一致 - 构建工具(如 Webpack/Vite)注入 runtime chunk 时,动态拼接的
script标签没带integrity,漏校验 - 开发环境用
file://协议打开页面:Subresource Integrity 在非 HTTPS(及 localhost 以外的 HTTP)下被浏览器完全禁用,控制台报Failed to find a valid digest in the 'integrity' attribute
integrity 是一道轻量但关键的防线,但它只管“下载下来的内容对不对”,不管“谁发起的请求”“内容从哪来”“服务端有没有被黑”。真正防供应链攻击,得配合锁定版本号、使用私有 CDN、定期轮换哈希、以及服务端对资源指纹做二次备案——这些都不是 integrity 自己能干的。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










