全部指南
严重程度:高危配置错误

生产环境中的 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,压缩会被完全还原成可读的源代码。

你的应用受影响了吗?

AppSafe 一次免费扫描,就能检查这个问题以及数十项其他问题。

免费扫描我的应用