网易首页 > 网易号 > 正文 申请入驻

理解 Subresource Integrity

0
分享至

如果你曾经使用过 CDN 托管的 JavaScript 库,你可能会注意到 script 标签上有一个奇怪的 integrity 属性。这个属性包含了看似冗长的毫无意义的字符,你可能会在清理冗余代码时想把它们去掉。

这些冗长的字符实际上是一个非常有用的安全特性,称为 Subresource Integrity(中文翻译为子资源完整性,简写为SRI),它可以帮助保护你的网站免受某些类型的黑客攻击和破坏。在本文中,我们将了解什么是SRI,它是如何帮助保护你的,以及你如何在自己的项目中使用它。

由来

回想以前,JavaScript 是和 HTML 及CSS 混杂在一起的,我们无需过多考虑网站中的脚本会被用做攻击的工具。大多数网站都托管在自己的一台物理服务器上,当谈到安全最佳实践时,我们考虑的是保护该服务器。

随着浏览器变得更加强大,网速更快,我们开始使用越来越多的JavaScript,最终可重用的JavaScript 库开始涌现。在早期,像 script.aculo.us、Prototype 和 jQuery 这样的库开始被普遍采用以增强网页的交互性。

随着这些库和插件的增加,页面体积也越来越大,然后我们开始认真考虑优化前端性能。像 CDN 这样的资源,以前是大公司的储备,现在对于从事 Web 开发的人来说已经司空见惯。

在这个过程中,有些聪明的开发者注意到了许多网站都在使用自己的公共库文件,例如最新的 jQuery,如果在一个公共 CDN 上托管这个文件可供每个网站使用,那样用户就不必每次都下载相同的文件了。他们在首次使用此文件时下载,然后会保存在浏览器缓存里,访问其他网站时如果再用到此文件时直接从浏览器缓存中读取即可!

这就是为什么像 jsdelivr 这类 CDN 非常受欢迎的原因,它们托管了许多流行的类库可供所有网站使用。

遇到了什么问题?

使用 CDN 仍然是一种有效提升前端性能的方式,不过也带了潜在的安全问题。让我们假设现在是2012年,每个人都在使用新出的 jQuery 1.8。回到传统的做事方式,每个网站都有自己的 jQuery 1.8文件,寄放在自己的服务器上以供自己的网站使用。

如果你是攻击者,并且想出了一个偷偷摸摸的方法来黑掉这个类库以获取非法所得,你必须单独针对每个网站,单独攻击每个网站的服务器。那样需要耗费巨大的精力。

但现在情况并非如此,因为每个网站都在使用从公共 CDN 加载的 jQuery。而我说的每个网站,并不是指几百个网页。我指的是数百万个网页。突然那个文件成了黑客非常有吸引力的目标。如果他们可以黑掉这一个文件,他们可以非常迅速地在全球数百万个网页上运行代码。

恶意代码是什么并不重要。可以是破坏页面的恶作剧代码,可能是窃取密码的代码,可能是挖掘加密货币的代码,也可能是悄悄记录用户行为用于精准市场营销的追踪代码。重要的是,开发人员添加到页面中的文件已经被更改,现在你的网站中有一些恶意的 JavaScript 代码在运行。这是个大问题。

引入 Subresource Integrity

我们不会因噎废食就放弃使用 CDN,SRI 提供了一种简单的提升安全的方案。SRI 和 integrity 属性的作用是确保你链接到网页的文件永远不会改变。如果它真的改变了,浏览器就会拒绝执行这个文件。

检查代码是否更改是计算机科学中一个非常老的问题,有一些非常好的解决方案。SRI 采用了最简单的方法——文件散列法(file hashing)。

文件散列是接收文件并通过算法运行文件内容生成一个短字符串的过程,这个生成的字符串称之为哈希值(hash)。这个过程是可重复的,如果你给别人一个文件和它对应的哈希值,他们就可以运行相同的算法来检查两者是否匹配。如果文件改变了或者哈希值改变了,那么就不再匹配了,你知道有问题,应该不信任这个文件。

使用 SRI 时,你的网页保存哈希值,服务器(CDN或其他地方)托管文件。浏览器下载文件,然后快速计算以确保它与 integrity 属性中的哈希值匹配。如果匹配,则使用该文件,如果不匹配,则被阻止。

使用 SRI

现在使用 BootstrapCDN 引入文件,官方会提供如下的引入代码:

可以看到 src 属性值指向了 CDN 上的文件,integrity 属性值就是对应的哈希值。

哈希值实际上分为两部分。第一部分是个前缀,它声明了所使用的是哪种哈希算法,上面的例子中采用的是 sha384。后面是一个横线以及使用了 base64 编码后的哈希值。

在浏览器中执行时,它会首先下载文件。在执行文件之前先 base64 解码哈希值,然后使用 sha384 哈希算法确保哈希值和刚下载的文件是匹配的。如果匹配,就会执行文件。

在浏览器中执行上述代码,可以看到 CSS 和 JS 文件都正确加载并执行了。在浏览器的开发者工具 Network 面板可以看到网络请求情况:

让我们看一下如果修改了 bootstrap.min.js 的哈希值会怎么样:

如上所见,文件被加载了,但是哈希值不再匹配,所以浏览器拒绝执行该文件。

在你的项目中使用 SRI

CDN 为公共类库提供的这个功能很棒,但是不止于此,你也可以在自己的网站使用 SRI。你可以为自己的文件生成哈希值,然后浏览器在执行前会执行校验,就像 CDN 提供的功能那样。

有一些工具可以生成 SRI 哈希值。你可以在命令行使用 openssl :

或者在命令使用 shasum :

此外,有些网站如 https://www.srihash.org/ 可以在线生成 SRI 哈希值。

如果你的资源文件和引入的网页位于不同的域名下,浏览器还会额外使用 CORS 检查资源文件,以确保允许来自其他域名的引用。因此,在托管资源文件的服务器上必须设置 Access-Control-Allow-Origin 响应头,以允许来自其他域名的请求。例如:

最后要说的是浏览器兼容性。目前 SRI 已经在主流浏览器上得到了支持,除了 IE。你可以放心使用这个特性,由于它是向后兼容的,在不支持 SRI 的浏览器上也不会引起问题,只不过失去了额外的保护。

结语

我们不仅了解了 integrity 属性中那些奇怪的散列值的作用,还学习了如何使用它们来防御对于网站的攻击。当然了,没有一劳永逸的方式可以保护我们的网站免受各种类型的攻击,但是子资源完整性是一个非常有用的工具。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
又一个国家出兵增援俄罗斯,全是山地战精锐:专门善于打美械精锐

又一个国家出兵增援俄罗斯,全是山地战精锐:专门善于打美械精锐

看世界的人
2024-11-27 22:44:13
不做大哥好多年,又无利益冲突,英国为何成为反俄急先锋?

不做大哥好多年,又无利益冲突,英国为何成为反俄急先锋?

高博新视野
2024-11-23 19:07:53
嵘泰股份:公司从墨西哥出口到美国的产品,采用FCA的贸易模式,客户上门取货

嵘泰股份:公司从墨西哥出口到美国的产品,采用FCA的贸易模式,客户上门取货

每日经济新闻
2024-11-27 16:21:48
涉嫌逃服兵役!乌克兰2.3万大学生被开除

涉嫌逃服兵役!乌克兰2.3万大学生被开除

鲁中晨报
2024-11-27 21:36:07
证监会停止降温股市!11月28日,今日凌晨的四大消息冲击股市!

证监会停止降温股市!11月28日,今日凌晨的四大消息冲击股市!

风口招财猪
2024-11-28 00:15:02
11年没性生活!小S喊话老公「想开放性关系」 提条件:不要有小孩就好

11年没性生活!小S喊话老公「想开放性关系」 提条件:不要有小孩就好

ETtoday星光云
2024-11-27 14:14:05
1979年,黄干宗被两越南女兵活捉,女兵:不杀你,给我们当丈夫!

1979年,黄干宗被两越南女兵活捉,女兵:不杀你,给我们当丈夫!

百态人间
2024-11-27 16:09:36
英国竟愿拿20亿英镑,补贴在英中资钢铁公司,希望不要关门撤资!

英国竟愿拿20亿英镑,补贴在英中资钢铁公司,希望不要关门撤资!

现代春秋
2024-11-26 21:38:07
一条藤上几根“瓜”,李庚希再被爆猛料,该担心的何止韩红一人!

一条藤上几根“瓜”,李庚希再被爆猛料,该担心的何止韩红一人!

洲洲影视娱评
2024-11-21 21:19:24
终于熬到退休!江苏某企业42.5年工龄职工退休金曝光

终于熬到退休!江苏某企业42.5年工龄职工退休金曝光

FarmerLZJ
2024-11-26 17:45:06
深圳楼市:南山太疯狂了

深圳楼市:南山太疯狂了

楼市诸葛
2024-11-28 07:00:08
确诊癌症!浙江男子:我只是胸闷气急,医生:警惕这些反常信号

确诊癌症!浙江男子:我只是胸闷气急,医生:警惕这些反常信号

FM93浙江交通之声
2024-11-27 16:31:11
何赛飞怎么也没想到,从影38年不温不火,竟被李庚希推上风口浪尖

何赛飞怎么也没想到,从影38年不温不火,竟被李庚希推上风口浪尖

简读视觉
2024-11-27 15:40:02
谈个高个子女生是什么体验?身体真的遭不住啊。

谈个高个子女生是什么体验?身体真的遭不住啊。

有趣的火烈鸟
2024-09-09 07:22:09
NBA现役最不讲义气的球员,非以下四位莫属!

NBA现役最不讲义气的球员,非以下四位莫属!

田先生篮球
2024-11-27 21:24:28
周鹏、赵睿、胡明轩落选!广东男篮历史最佳国内球员五人组

周鹏、赵睿、胡明轩落选!广东男篮历史最佳国内球员五人组

户外钓鱼哥阿旱
2024-11-28 07:15:11
华为Mate 70系列正式发布:整机性能暴增40%,搭载原生鸿蒙系统

华为Mate 70系列正式发布:整机性能暴增40%,搭载原生鸿蒙系统

环球网资讯
2024-11-26 16:13:06
30年前悲剧重演!三大球男足山东夺冠,徐根宝再负殷铁生,很无奈

30年前悲剧重演!三大球男足山东夺冠,徐根宝再负殷铁生,很无奈

探寻者
2024-11-27 16:18:06
把“炎症”吃回去!研究发现:这些食物都有抗炎属性!

把“炎症”吃回去!研究发现:这些食物都有抗炎属性!

人民日报健康客户端
2024-11-26 07:37:38
维拉0-0尤文,迪涅中框,大马丁神扑救险,罗杰斯进球被吹

维拉0-0尤文,迪涅中框,大马丁神扑救险,罗杰斯进球被吹

懂球帝
2024-11-28 06:10:29
2024-11-28 08:32:49
小象Web开发
小象Web开发
专注于web开发领域
25文章数 909关注度
往期回顾 全部

科技要闻

利润暴跌40%后,三星芯片部门任命新负责人

头条要闻

特朗普宣布俄乌冲突问题特使人选 曾任白宫要职

头条要闻

特朗普宣布俄乌冲突问题特使人选 曾任白宫要职

体育要闻

开局5连胜!利物浦2-0皇马 姆巴佩失点

娱乐要闻

天呐鹿晗瘦了这么多,像漫画出来的

财经要闻

马光远:所有的房地产政策基本都到位了

汽车要闻

中国的超豪华车尊界S800 预售百万起/ L3级智驾

态度原创

游戏
手机
教育
本地
公开课

暖心冒险游戏《雪人的故事》12月强化登陆Switch

手机要闻

3699元起!这顶配性能旗舰,要把友商锤爆了?

教育要闻

初中数学规律类公式,一定要学会推导过程!

本地新闻

民间高手丨千年传承“手艺人”更是“守艺人”

公开课

一块玻璃,如何改变人类世界?

无障碍浏览 进入关怀版