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 相关文章推荐
对textarea框的代码调试,而且功能上使用非常方便,酷
Jun 30 Javascript
斜45度寻路实现函数
Aug 20 Javascript
客户端 使用XML DOM加载json数据的方法
Sep 28 Javascript
Jquery对数组的操作技巧整理
Mar 25 Javascript
JS判断、校验MAC地址的2个实例
May 05 Javascript
总结JavaScript三种数据存储方式之间的区别
May 03 Javascript
微信小程序加载更多 点击查看更多
Nov 29 Javascript
Ionic学习日记实现验证码倒计时
Feb 08 Javascript
vue生命周期实例小结
Aug 15 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 Javascript
JS实现盒子拖拽效果
Feb 06 Javascript
谈谈node.js中的模块系统
Sep 01 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 #Javascript
JavaScript中isPrototypeOf函数
JavaScript原型链详解
JavaScript组合继承详解
详细聊聊vue中组件的props属性
教你一步步实现一个简易promise
Nov 02 #Javascript
一定要知道的 25 个 Vue 技巧
You might like
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
php判断当前操作系统类型
2015/10/28 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
php实现session共享的实例方法
2019/09/19 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
vue实现跨域的方法分析
2019/05/21 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
你应该知道的python列表去重方法
2017/01/17 Python
Python生成随机密码的方法
2017/06/16 Python
Python PO设计模式的具体使用
2019/08/16 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
python 从list中随机取值的方法
2020/11/16 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
Linux操作面试题
2012/05/16 面试题
文化活动实施方案
2014/03/28 职场文书
家长对孩子的评语
2014/04/18 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
物业保安辞职信
2015/05/12 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS
Mysql中常用的join连接方式
2022/05/11 MySQL
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers