0x00 漏洞描述
Source Map(源码映射)是前端开发中使用的一种调试文件,主要用于将经过压缩、合并或编译的代码映射回原始源代码,方便开发人员定位问题。
在生产环境中,如果 Source Map 文件未进行访问限制,可能导致外部人员直接获取前端源码。
常见文件形式:
main.js
main.js.map
app.js
app.js.map如果映射文件包含完整的原始源码,可能造成以下信息泄露:
前端源码泄露:暴露业务逻辑、模块结构及代码实现。
接口信息泄露:暴露 API 地址、请求参数及接口结构。
内部路径泄露:暴露项目目录、模块名称及文件路径。
敏感配置泄露:可能暴露误写入前端代码的密钥、内部地址等信息。
需要注意:Source Map 文件公开不一定构成漏洞,实际风险取决于文件包含的内容。
0x01 漏洞原理
前端项目通常会通过 Webpack、Vite 等构建工具,对 JavaScript、TypeScript 等文件进行编译和压缩。
Source Map 用于建立生成代码与原始源码之间的映射关系。
例如,JavaScript 文件末尾可能存在:
//# sourceMappingURL=main.js.map该注释用于指定对应的 Source Map 文件。
Source Map 通常采用 JSON 格式,其中几个重要字段如下:
重点关注 sourcesContent: 如果该字段包含源码内容,就可能直接暴露前端原始代码。
0x02 漏洞产生原因
常见原因主要有以下几种:
生产环境开启 Source Map:构建时生成映射文件,并随前端资源一起发布。
发布文件未清理:部署时直接上传整个构建目录,导致
.map文件被一并公开。部署流程配置不当:CI/CD 未过滤不需要公开的调试文件。
本质上是生产环境未合理管理前端调试文件。
0x03 漏洞复现
在自有项目或授权测试环境中进行验证。
1. 检查 JavaScript 文件
查看前端 JS 文件末尾是否存在:
//# sourceMappingURL=main.js.map2. 检查对应映射文件
在本地测试环境中访问:
http://localhost:5173/assets/main.js.map如果能够正常返回 JSON 内容,继续检查文件中的 sources 和 sourcesContent 字段。
3. 判断泄露情况
4. 浏览器验证
打开浏览器开发者工具(F12),进入 Sources 面板,检查是否能够查看映射后的原始源码。
开发者工具
↓
Sources 面板
↓
查看映射文件
↓
检查原始源码是否暴露0x04 修复建议
1. 关闭生产环境 Source Map
vite
export default {
build: {
sourcemap: false
}
}Webpack:
module.exports = {
devtool: false
}2. 清理公开目录
生产环境发布前,删除不需要公开的 .map 文件,避免调试文件随构建产物一起部署。
3. 限制文件访问
如果业务需要保留 Source Map,应将其存储在受控环境中,或通过 Web 服务器限制外部访问。
4. 处理已泄露信息
如果源码中存在真实密钥或敏感凭据,应及时轮换或吊销,并排查相关访问日志。
0x05 总结
Source Map 本身不是漏洞,生产环境不合理地公开源码映射文件才是问题。
当 .map 文件包含 sourcesContent 时,可能直接暴露前端源码,进一步泄露接口信息、业务逻辑和敏感配置。
因此,建议生产环境默认关闭不必要的 Source Map,发布前检查构建产物,避免调试文件被公开访问。
0x06 About 作者
仅用于技术学习和授权环境下的安全测试。