首页/安全/漏洞与攻击面速查/Source Map 泄露与处理
Web 漏洞原理与防护55 条

Source Map 泄露与处理

前端构建产物若携带 sourcemap,可用于还原源码结构、接口与注释;生产环境应关闭公开 sourcemap 或限制访问,仅在内部调试链路保留。

漏洞与攻击面速查安全更新于 2026-10-13

Source Map 泄露什么

Source Map(.map 文件)保存了打包产物与原始源码的映射关系,浏览器用它把压缩代码还原成可读源码。生产环境若连同 .map 一起发布,外部可还原出源码结构、模块划分、接口名、路由与注释。它本身不构成执行风险,但会显著降低攻击者的理解成本,属于应主动收敛的信息暴露面。

基本信息

触发条件构建时生成 sourcemap 且部署到公开目录
常见文件app.js.map、*.css.map、main.[hash].js.map
识别方式构建产物末尾的 sourceMappingURL 注释
影响源码结构、接口与注释外泄
处置方向生产关闭公开 map,或迁移到内网鉴权路径

典型使用场景

  • 上线前自查:确认生产构建产物不含可公开访问的 .map 文件
  • CDN 清理:历史版本目录常残留旧 map,需同步清理
  • 内网调试:确需源码级调试时,把 map 放到内网路径并加鉴权
  • 前端监控:错误上报平台上传私有 sourcemap 供符号化,不对外发布
  • 第三方依赖排查:确认公共库自带的 map 是否被一并发布

构建配置与自查

构建配置与自查
# 构建侧
# Webpack:production 使用 devtool: false
# Vite:build.sourcemap 保持 false(默认即为 false)

curl -sI https://example.com/assets/app.js.map     # 期望 404
curl -s https://example.com/assets/app.js | tail -c 200   # 检查是否有 sourceMappingURL 注释
find dist -name '*.map' -print                      # 产物目录自查

常见来源与处置

来源表现处置
前端构建配置devtool 或 sourcemap 打开生产关闭,仅 CI 内部保留
CDN 历史目录旧版本目录仍有 map清理历史发布目录与缓存
错误监控平台map 上传到可公开下载的位置改为私有存储 + 鉴权访问
静态资源服务器同域直接可 GET迁移到内网路径或加访问控制
sourcemap 的价值在排错:内部保留一份私有 map(配合错误监控做符号化)比彻底删掉更实用,关键是不对外公开。
构建时关了 map 但 CDN 上仍有历史版本时,扫描仍会命中;收敛动作要拆成两步:新版本不再产出 + 旧产物与缓存一并清理。

易错点

  • 构建时关了 map 但 CDN 上残留历史版本:清理产物时要同步清理缓存与历史目录
  • 只删 .map 不管产物里的 sourceMappingURL 注释:浏览器仍会发起请求并返回 404 噪音,排查困难
  • 把 map 放到同域另一个公开路径:等同于没收敛,仍是公开可下载
  • 认为 sourcemap 泄露不严重而不处理:接口清单与内部命名会直接暴露,后续攻击成本大幅降低

数据来源与参考

  • Webpack 文档(devtool 配置)
  • Vite 文档(build.sourcemap)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌