前言
随着技术的快速发展,Vue作为流行的JavaScript
框架,被应用于前端开发,但是作为开发人员在使用Vue时,需要注意应用的安全性,以便于保护应用数据的安全并且防御常见的攻击行为。
本文介绍的是两个安全漏洞及其解决方法:
背景
这周上线的项目中被公司安全部门漏扫出来一些漏洞,其中有一个是vue版本过低的问题

还有一个是JavaScript框架升级漏洞(如图):
首先对第一个框架漏洞进行介绍:
1、 Vue版本过低
项目之前用的版本是2.6.10,下面是给出的漏洞风险分析
风险分析
vue版本2.6.10存在以下漏洞:将 vue-server-renderer 对serialize-javascript的依赖提升到2.1.2
当时看到这个分析的时候,我先进入安全人员给的链接地址,进行查看官方是哪个版本进行的修复处理的这个漏洞,(2.6.11这个版本进行了修复) ,我一看简单直接去修改package.json
直接换成 "vue": "^2.6.11"
,紧接着就操作了依赖安装命令:
js
npm i
安装依赖的过程,没有问题,启动命令npm run dev
后 报错了,提示如下截图
出现这个问题是与Vue版本不匹配,那时候
package.json
配置文件,并没有显示这个模板包依赖,进行下载安装后升级到了相同的版本,
js
npm i vue-template-compiler@xxxxxx --save
XXX代表版本号
问题至此解决,这是第一个问题。 接下来处理第二个YUI漏洞修复
二、YUI漏洞
首先给大家看看安全这边给出的风险分析
YUI版本2.9.0存在以下漏洞: YUI 2.8.0 至 2.9.0 的 Flash 组件基础结构中存在跨站脚本 (XSS) 漏洞,如低于 4.0.9 的 Bugzilla 3.7.x 和 4.0.x、低于 4.2.4 的 4.1.x 和 4.2.x 以及低于 4.4rc1 的 4.3.x 和 4.4.x,允许远程攻击者通过与 swfstore.swf 相关的向量注入任意 Web 脚本或 HTML,该漏洞与 CVE-2010-4209 类似等
我看到这个的时候,我全局在代码中搜索 YUI,确实搜到了一段注释

点击进入这个文件后我查看了一下文件路径,发现他在node_modules>jsencrypt中, 网上搜索了一下YUI2 的版本漏洞结果也指出了漏洞问题

YUI是什么
YUI是一套用于构建丰富交互Web应用程序的JavaScript和CSS库。YUI 提供了一系列工具和组件,旨在简化Web开发人员创建动态、可交互的用户界面的过程。
经过查询发现,jsencrypt中只使用了lang.extend方法,并没有进行其他操作,那也就是说安全只是扫描了YUI版本号作为安全漏洞依据。
解决方法:
删除掉YUI版本这块的注释即可。
方法一: 网上搜的办法大部分是使用压缩后(不含注释)的文件:node_modules\jsencrypt\bin\jsencrypt.min.js
js
// 旧的引入方式
import JSEncrypt from 'jsencrypt'
// 新的引入方式
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
方法二:优化vue.config.js打包配置文件
在打包环节删除注释 需要在vue.config.js中配置:
js
chainWebpack(config) {
config.optimization.minimizer('terser').tap(args=>{
args[0].terserOptions.output={
comments:false
}
return args
})
},
这个方法报错了,报错为config.optimization.minimizer(...).tap is not a function, 后来百度又安装了terser-webpack-plugin
js
npm install terser-webpack-plugin
方法三:public/index.html中引入jsencrypt.min.js
js
public/index.html中引入jsencrypt.min.js (下载到本地放到public/js文件中)
卸载安装的jsencrypt (npm uninstall jsencrypt)
删除项目中对jsencrypt包的引用
方法二、方法三都试了可以解决问题、成功去掉了注释。
总结
以上为个人经验,希望能给大家一个参考,如有Vue其他安全问题,欢迎大家多多留言。