解决Vue2官网Webpack源码泄露漏洞

一:漏洞产生

Webpack是一个JavaScript应用程序的静态资源打包器。大部分Vue等应用项目会使用Webpack进行打包,如果没有正确配置,就会导致项目源码泄露,可能泄露的各种信息如API、加密算法、管理员邮箱、内部功能等等。

F12查看源代码,经过Webpack打包后末尾会存在这样的注释

将注释内容拼接到域名后,访问下载js.map文件

http://www.xxxx.com/js/app.8cdc0ffa.js.map

然后在文件目录下打开终端输入: reverse-sourcemap -v app.8cdc0ffa.js.map -o test

二:解决办法

解决思路

Webpack 生成的.map 文件(即 JavaScript 源映射文件)会暴露项目的原始代码结构,这可能导致敏感信息泄露。要解决此问题,主要从两方面入手:一是禁止生成这些源映射文件,二是保证生产环境无法访问到它们。

具体操作方法

1. 禁止生成 JavaScript 源映射文件

若项目采用 Vue CLI 构建,可按以下步骤操作:

首先,打开项目根目录下的vue.config.js文件。要是没有这个文件,就自行创建一个。

接着,在文件里添加或修改如下配置:

javascript 复制代码
module.exports = {
  productionSourceMap: false, // 关闭生产环境的源映射文件生成
  configureWebpack: {
    devtool: false // 确保开发工具不会生成源映射
  }
}

若项目是基于 Webpack 直接配置的,就需要修改webpack.prod.js配置文件:

javascript 复制代码
const config = {
  // 其他配置...
  devtool: false, // 关闭生产环境的源映射
  optimization: {
    // 其他优化配置...
  }
};
2. 删除已存在的源映射文件

在项目目录下打开终端,执行以下命令删除现有源映射文件:

bash 复制代码
find dist -name "*.js.map" -type f -delete

如果你使用的是 Windows 系统,可以使用 PowerShell 命令:

bash 复制代码
Get-ChildItem -Path dist -Filter *.js.map -Recurse | Remove-Item
3. 配置 Nginx/Apache 禁止访问源映射文件

如果你使用的是 Nginx 服务器,可在配置文件中添加如下规则:

bash 复制代码
location ~ \.js\.map$ {
    deny all;
    return 404;
}

若是 Apache 服务器,则在.htaccess文件中添加以下内容:

bash 复制代码
<FilesMatch "\.js\.map$">
    Order deny,allow
    Deny from all
</FilesMatch>
4. 更新项目部署流程

修改 CI/CD 脚本或者部署流程,防止源映射文件被部署到生产环境。比如,在构建命令中明确排除这些文件:

bash 复制代码
npm run build -- --no-source-map
5. 验证修复效果

部署修改后的代码之后,要验证源映射文件是否还能被访问。具体操作是尝试访问之前的 URL:

复制代码
http://www.gzznjk.com/js/app.8cdc0ffa.js.map

如果修复成功,访问时会返回 404 错误。

额外建议

  1. 检查项目依赖,保证使用的是 Webpack 和 Vue 的最新稳定版本。
  2. 对所有生产环境的域名进行扫描,确认没有其他源映射文件泄露的情况。
  3. 把源映射文件添加到.gitignore中,避免它们被提交到版本控制系统。
  4. 考虑使用代码混淆工具,如 Terser,来增强生产代码的安全性。

通过上述步骤,就能有效解决 Webpack 源码泄露漏洞,保护项目的敏感信息不被泄露。

相关推荐
TimelessHaze8 分钟前
拆解字节面试题:async/await 到底是什么?底层实现 + 最佳实践全解析
前端·javascript·trae
执键行天涯38 分钟前
从双重检查锁定的设计意图、锁的作用、第一次检查提升性能的原理三个角度,详细拆解单例模式的逻辑
java·前端·github
青青子衿越40 分钟前
微信小程序web-view嵌套H5,小程序与H5通信
前端·微信小程序·小程序
OpenTiny社区1 小时前
TinyEngine 2.8版本正式发布:AI能力、区块管理、Docker部署一键强化,迈向智能时代!
前端·vue.js·低代码
qfZYG1 小时前
Trae 编辑器在 Python 环境缺少 Pylance,怎么解决
前端·vue.js·编辑器
bug爱好者1 小时前
Vue3 基于Element Plus 的el-input,封装一个数字输入框组件
前端·javascript
Silence_xl1 小时前
RACSignal实现原理
前端
柯南二号1 小时前
【大前端】实现一个前端埋点SDK,并封装成NPM包
前端·arcgis·npm
dangkei1 小时前
【Wrangler(Cloudflare 的官方 CLI)和 npm/npx 的区别一次讲清】
前端·jvm·npm
乔公子搬砖1 小时前
小程序开发提效:npm支持、Vant Weapp组件库与API Promise化(八)
前端·javascript·微信小程序·js·promise·vagrant·事件绑定