解决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 源码泄露漏洞,保护项目的敏感信息不被泄露。

相关推荐
三小河4 小时前
Agent Skill与Rules的区别——以Cursor为例
前端·javascript·后端
Hilaku4 小时前
不要在简历上写精通 Vue3?来自面试官的真实劝退
前端·javascript·vue.js
三小河4 小时前
前端视角详解 Agent Skill
前端·javascript·后端
Aniugel5 小时前
单点登录(SSO)系统
前端
鹏多多5 小时前
移动端H5项目,还需要react-fastclick解决300ms点击延迟吗?
前端·javascript·react.js
serioyaoyao5 小时前
上万级文件一起可视化,怎么办?答案是基于 ParaView 的远程可视化
前端
万少5 小时前
端云一体 一天开发的元服务-奇趣故事匣经验分享
前端·ai编程·harmonyos
WindrunnerMax5 小时前
从零实现富文本编辑器#11-Immutable状态维护与增量渲染
前端·架构·前端框架
不想秃头的程序员5 小时前
Vue3 封装 Axios 实战:从基础到生产级,新手也能秒上手
前端·javascript·面试
数研小生5 小时前
亚马逊商品列表API详解
前端·数据库·python·pandas