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 相关文章推荐
javascript编程起步(第六课)
Feb 27 Javascript
javascript下function声明一些小结
Dec 28 Javascript
JQuery AJAX提交中文乱码的解决方案
Jul 02 Javascript
jquery对象和DOM对象的区别介绍
Aug 09 Javascript
JS实现往下不断流动网页背景的方法
Feb 27 Javascript
js实现跨域的多种方法
Dec 25 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
Dec 13 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
vue项目中使用vue-i18n报错的解决方法
Jan 13 Javascript
es6数值的扩展方法
Mar 11 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
Aug 26 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 #Javascript
JavaScript中isPrototypeOf函数
JavaScript原型链详解
JavaScript组合继承详解
详细聊聊vue中组件的props属性
教你一步步实现一个简易promise
Nov 02 #Javascript
一定要知道的 25 个 Vue 技巧
You might like
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
php miniBB中文乱码问题解决方法
2008/11/25 PHP
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
Python数据类型详解(二)列表
2016/05/08 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
用Eclipse写python程序
2018/02/10 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
Python中遍历列表的方法总结
2019/06/27 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
python使用建议技巧分享(三)
2020/08/18 Python
如何把python项目部署到linux服务器
2020/08/26 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
新闻系毕业生推荐信
2013/11/16 职场文书
部门活动策划方案
2014/08/16 职场文书
归元寺导游词
2015/02/06 职场文书
人事任命通知书
2015/04/21 职场文书