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中的load方法装载IE缓存中文件的方法
Sep 11 Javascript
基于JQUERY的多级联动代码
Jan 24 Javascript
详解JavaScript中的异常处理方法
Jun 16 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
js中使用使用原型(prototype)定义方法的好处详解
Jul 04 Javascript
浅谈javascript中的加减时间
Jul 12 Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 Javascript
JavaScript结合HTML DOM实现联动菜单
Apr 05 Javascript
Javascript获取某个月的天数
May 30 Javascript
Vue基本使用之对象提供的属性功能
Apr 30 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
Aug 23 Javascript
vue中提示$index is not defined错误的解决方式
Sep 02 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 #Javascript
JavaScript中isPrototypeOf函数
JavaScript原型链详解
JavaScript组合继承详解
详细聊聊vue中组件的props属性
教你一步步实现一个简易promise
Nov 02 #Javascript
一定要知道的 25 个 Vue 技巧
You might like
PHP脚本中include文件出错解决方法
2008/11/20 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
Symfony的安装和配置方法
2016/03/17 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
Python中编写ORM框架的入门指引
2015/04/29 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
Python实现的购物车功能示例
2018/02/11 Python
Python3 replace()函数使用方法
2018/03/19 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
品牌宣传方案
2014/03/21 职场文书
班主任对学生的评语
2014/04/26 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android