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 相关文章推荐
基于jQuery的表格操作插件
Apr 22 Javascript
基于jquery的地址栏射击游戏代码
Mar 10 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
Oct 11 Javascript
nullJavascript中创建对象的五种方法实例
May 07 Javascript
自己编写的类似JS的trim方法
Oct 09 Javascript
js动态控制table的tr、td增加及删除的具体实现
Apr 30 Javascript
Vue.js 表单校验插件
Aug 14 Javascript
JavaScript中关于iframe滚动条的去除和保留
Nov 17 Javascript
详解Vuejs2.0之异步跨域请求
Apr 20 Javascript
微信小程序开发之toast等弹框提示使用教程
Jun 08 Javascript
微信小程序实现团购或秒杀批量倒计时
Nov 01 Javascript
vue 图片裁剪上传组件的实现
Nov 12 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 #Javascript
JavaScript中isPrototypeOf函数
JavaScript原型链详解
JavaScript组合继承详解
详细聊聊vue中组件的props属性
教你一步步实现一个简易promise
Nov 02 #Javascript
一定要知道的 25 个 Vue 技巧
You might like
解析php类的注册与自动加载
2013/07/05 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Python中实现switch功能实例解析
2018/01/11 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
介绍下Java中==和equals的区别
2013/09/01 面试题
年度考核自我鉴定
2014/02/02 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
申论倡议书范文
2014/05/13 职场文书
公司委托书格式范本
2014/09/16 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
订货会邀请函
2015/01/31 职场文书
如何在python中实现ECDSA你知道吗
2021/11/23 Python
nginx共享内存的机制详解
2022/03/21 Servers