Vercel 预览部署暴露 API 密钥的真相
你分享了一个预览 URL——同时广播了你的密钥
你通过 Vercel 预览部署向团队演示新功能。一位开发者点击链接,打开开发者工具,滚动 Network 标签。就在那里:你的 Stripe API 密钥、数据库密码、AWS 凭证——全部嵌在响应头或构建日志里。任何拥有这个 URL 的人现在都可以访问你的生产 API。一小时内,有人可能在运行测试交易、窃取用户数据或消耗你的云配额。
你从不打算泄露这些。它们不在你的代码里。但它们就是在那里。
环境变量如何泄露到预览部署中
Vercel 的预览部署是个超级武器:每个 PR 都立即获得一个实时 URL,使代码审查直观且即时。但它们也有代价。如果你使用环境变量存储 API 密钥、数据库 URL、第三方令牌,这些变量会在构建过程中嵌入输出,除非你明确阻止。
原理是这样的:
- 构建时暴露:代码中引用的环境变量在构建期间被嵌入。如果在客户端代码中使用它们(即使是条件性的),它们最终会出现在你的 JavaScript 包中——公开、可访问给任何拥有 URL 的人。
- 头部和元数据:服务端环境变量有时会泄露到响应头、错误消息或调试日志中——尤其是在开发环境中或记录过多时。
- Source maps 和构建产物:如果预览包含 source maps(它不应该,但常常这样做),有人可以反向工程你的设置并找到密钥存储位置。
- GitHub Actions 日志:如果你从 GitHub action 构建和部署,这些日志通常是公开的。任何监视仓库的人都可以看到哪些环境变量被传递给构建。
为什么它隐形到太晚才发现
最阴险的部分:你不会注意到,直到有人这样做。你专注于功能更改,而不是哪些变量通过了。DevTools 界面不会尖叫”你的 API 密钥在这里”。错误日志看起来很正常。网站加载、工作并看起来没问题。
与此同时: - 你团队中的一个好奇的开发者右键点击”检查”。 - 来自第三方库的贡献者测试预览。 - 有人从你的 GitHub 抓取 PR URL 并检查它们是否暴露了密钥。这种事情持续发生在网络上。
当你意识到发生了什么时,伤害可能已经造成。
实际风险是什么
如果攻击者获得你的预览环境变量,伤害是立即的:
- API 密钥滥用:对你的 Stripe、SendGrid 或 Twilio 账户运行数千个 API 调用——在几小时内产生费用。
- 数据库访问:泄露数据库连接字符串,他们可以直接访问所有客户数据。
- 第三方冒充:OAuth 令牌、webhook 签名密钥、SaaS 工具的管理令牌——这些都成为可利用的表面。
- 云凭证盗窃:AWS 密钥、GCP 服务账户、Azure 凭证——直接访问你的基础设施。
这些都不需要复杂的攻击。一个 curl 命令和 grep 就足够了。
修复:三层防御
第一层:永远不要提交密钥。 这是基础。使用 .env.local 并添加到 .gitignore。Git 历史是永久的——如果你曾经提交过密钥,立即轮换并假定泄露。
第二层:使用 Vercel 的环境变量 UI。 与其通过 GitHub 或构建脚本传递密钥,不如在 Vercel 的项目设置中直接添加:
- 转到 Settings → Environment Variables
- 如果密钥永不应进入预览,标记为”Production”
- 如果预览构建需要它们,标记为”Preview”
Vercel 自动按环境隔离这些。
第三层:清理到达客户端的内容。 如果变量必须可被浏览器代码访问,使用公开前缀:
NEXT_PUBLIC_API_URL=https://api.example.com // 安全暴露
STRIPE_SECRET_KEY=sk_live_abc123 // 永不暴露
Vercel 和其他构建工具自动从客户端构建中剥离未前缀的密钥。严格使用这个约定。
证明:立即审计你的预览
如果你有一个预览 URL 在运行,测试它:
- 在浏览器中打开预览链接。
- 打开 DevTools(F12 → Network 标签)。
- 重新加载页面并查看 API 请求。
- 检查头部,特别是
Authorization、自定义头部和 cookies。 - 检查 HTML 源代码(Ctrl+U)中的内联
window.config或类似脚本。
如果你看到 API 密钥、数据库 URL 或令牌,立即修复。这不是理论问题。
为什么这在规模上很重要
当你构建 SaaS 软件时——无论是为你的业务构建自定义工具还是为客户构建产品——这个安全盲点至关重要。专业的软件开发工作流在架构审查阶段捕获这些问题,在代码部署前。安全不是一项功能;它是一个检查点。这是防止昂贵漏洞和保护用户数据的严谨性。
如果你在管理自定义软件或想要有人检查你的安全态势,Trove Deck Solution 可以审计你从构建到生产的整个管道。如果你想走过你的设置并堵住漏洞,请随时联系我们。