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 相关文章推荐
正则表达式语法
Oct 09 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
Jan 17 Javascript
JavaScript继承模式粗探
Jan 12 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
Mar 28 Javascript
浅析Bootstrap组件之面板组件
May 04 Javascript
浅析Node.js实现HTTP文件下载
Aug 05 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
Aug 19 Javascript
关于JavaScript数组你所不知道的3件事
Aug 24 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
Oct 28 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 Javascript
js对象简介与基本用法示例
Mar 13 Javascript
微信小程序自定义扫码功能界面的实现代码
Jul 02 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 #Javascript
JavaScript中isPrototypeOf函数
JavaScript原型链详解
JavaScript组合继承详解
详细聊聊vue中组件的props属性
教你一步步实现一个简易promise
Nov 02 #Javascript
一定要知道的 25 个 Vue 技巧
You might like
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
PHP数组操作类实例
2015/07/11 PHP
js实现飞入星星特效代码
2014/10/17 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python列表去重的二种方法
2014/02/14 Python
Python实现从百度API获取天气的方法
2015/03/11 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
python中的时区问题
2021/01/14 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
维德科技C#面试题笔试题
2015/12/09 面试题
师范应届生求职信
2013/11/15 职场文书
丧事主持词大全
2014/04/02 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
语文教师求职信范文
2015/03/20 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书