Javascript使用integrity属性进行安全验证


Posted in Javascript onNovember 07, 2021

一、script标签引入文件

html中,script标签可以通过src属性引入一个js文件,引入的js文件可以是本地的,也可以是远程的。

1. 引入本地文件

开发环境一般多引入本地js文件。


<script src="./js/index.js"></script>
2. 引入远程文件

部署到线上后,一般会分发到cdn,需要引入远程文件,形如:


<script src="https://cdn.xxx.xx/js/index.js"></script>
只是引入远程文件存在一个问题,如果对应的文件被篡改了,那么可能会对用户造成影响。虽然cdn一般都是可靠的,但是不排除受到黑客的攻击。

在这种情况下,可以通过script标签的属性 integrity 来进行安全验证。

integrity安全验证
integrity属性设置引入js文件的hash值,浏览器在下载js文件时候,会对js文件进行hash计算,如果一致则正常加载,否则拒绝加载运行。

形如:

<script
    integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
    src="https://cdn.xxx.xx/js/index.js"></script>

二、示例

3. 引入vue的cdn资源

例如我们要引入vue的cdn资源:

https://unpkg.com/vue@3.0.5/dist/vue.global.js

可以通过 https://www.srihash.org/ 生成hash值。

integrity生成hash值
integrity生成hash值

最后将 integrity 的值添加到script标签即可。


<script src="https://unpkg.com/vue@3.0.5/dist/vue.global.js"
    integrity="sha384-0k9//QJdpmfSdp5IK3oJjOYPfz42f2FE0goMLtK9Vq7aKllvc4Lnz7lHPHiFhvDP"
    crossorigin="anonymous">
</script>

4. 验证是否正常

因为引入的是cdn资源,无法直接修改,但是修改 integrity 的值,如果修改了 integrity 的值,最终浏览器会报如下错误:

Failed to find a valid digest in the 'integrity' attribute for resource 'https://unpkg.com/vue@3.0.5/dist/vue.global.js' with computed SHA-256 integrity 'Wr5PnkpmZ3oQFRZLfDrI6fsePSMak5h8rW2rqq+mdWg='. The resource has been blocked.
意思就是cdn文件的hash值和 integrity 的不匹配。

Javascript 相关文章推荐
比较简单的异步加载JS文件的代码
Jul 18 Javascript
js Date自定义函数 延迟脚本执行
Mar 10 Javascript
javascript弹出层输入框(示例代码)
Dec 11 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
Javascript中arguments用法实例分析
Jun 13 Javascript
javascript添加前置0(补零)的几种方法
Jan 05 Javascript
浅谈angular.js跨域post解决方案
Aug 30 Javascript
JS实现运动缓冲效果的封装函数示例
Feb 18 Javascript
Vue面试题及Vue知识点整理
Oct 07 Javascript
详解如何更好的使用module vuex
Mar 27 Javascript
解决一个微信号同时支持多个环境网页授权问题
Aug 07 Javascript
js实现模拟购物商城案例
May 18 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 #Javascript
JavaScript中isPrototypeOf函数
JavaScript原型链详解
JavaScript组合继承详解
详细聊聊vue中组件的props属性
教你一步步实现一个简易promise
Nov 02 #Javascript
一定要知道的 25 个 Vue 技巧
You might like
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
微信公众号开发之微信公共平台消息回复类实例
2014/11/14 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
浅析js封装和作用域
2013/07/09 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
vue axios登录请求拦截器
2018/04/02 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
前端性能优化建议
2020/09/17 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现线程池代码分享
2015/06/21 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
农药学硕士毕业生自荐信
2013/09/25 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL