严重程度:高危配置错误
生产环境中的 source map 会泄露你的源代码
source map(.js.map 文件)让浏览器能把压缩后的代码映射回你的原始源代码。如果它们在生产环境中被公开提供,任何人都能连注释一起还原出你未压缩的代码库。
这是什么
构建工具会生成 source map 以辅助调试。当压缩后的打包文件引用了一个同样被部署的 .map 文件时,浏览器——以及任何人——都能下载到原始源代码。
这会暴露内部逻辑、命名、TODO 注释,有时还有硬编码的值,从而泄露你的后端和认证是如何运作的。
为什么重要
可读的源代码让攻击者更容易找出逻辑缺陷、隐藏的 endpoint,以及只在客户端运行的校验。
它还可能泄露那些被以为「藏」在打包文件里的密钥或内部 URL。
如何修复
在 Next.js 中禁用生产环境 source map
为生产构建关闭浏览器 source map。
// next.config.js
module.exports = { productionBrowserSourceMaps: false }; 或者把它们保持私有
如果你需要 source map 来做错误监控,就把它们上传到你的错误追踪工具(例如 Sentry),并从公开构建中剥离,而不是对外提供。
确认它们已消失
部署后,请求你打包文件的某个 .map URL。它应当返回 404,而不是 JSON 格式的 source map。
常见问题
source map 总是不好的吗?
不是——它们对调试非常宝贵。问题在于把它们在生产环境中公开提供。请改为把它们留在你的监控流程中。
压缩能保护我的代码吗?
只是表面上而已。有了公开的 source map,压缩会被完全还原成可读的源代码。