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 相关文章推荐
js 目录列举函数
Nov 06 Javascript
iframe 异步加载技术及性能分析
Jul 19 Javascript
javascript操纵OGNL标签示例代码
Jun 16 Javascript
javascript 实现map集合
Apr 03 Javascript
javascript实现计时器的简单方法
Feb 21 Javascript
domReady的实现案例
Nov 23 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
Mar 03 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
ES6中Symbol、Set和Map用法详解
Aug 20 Javascript
JS实现移动端在线签协议功能
Aug 22 Javascript
vue mvvm数据响应实现
Nov 11 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 #Javascript
JavaScript中isPrototypeOf函数
JavaScript原型链详解
JavaScript组合继承详解
详细聊聊vue中组件的props属性
教你一步步实现一个简易promise
Nov 02 #Javascript
一定要知道的 25 个 Vue 技巧
You might like
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
php 操作符与控制结构
2012/03/07 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
Python 中的Selenium异常处理实例代码
2018/05/03 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
详细分析Python collections工具库
2020/07/16 Python
基于Python实现简单学生管理系统
2020/07/24 Python
如何通过python检查文件是否被占用
2020/12/18 Python
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
人力资源管理专业学生自我评价
2013/11/20 职场文书
大学毕业生个人自荐信范文
2014/01/08 职场文书
小学数学教学反思
2014/02/02 职场文书
图书室标语
2014/06/21 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
班主任高考寄语
2015/02/26 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android