grep -rn 'import.meta.env.VITE_' src/
grep -ro 'sk_live_[A-Za-z0-9]*' dist/ | head

前端构建把 VITE_PAY_SECRET 写进 .env,打包后 dist/assets/index 的 js 里能直接 grep 到密钥明文,任何访客打开 DevTools 都能看到。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:Vite 只会把 VITE_ 前缀的变量注入客户端代码,这个前缀本身就是可以公开的意思。密钥被当成普通配置放在同一个 .env 文件里。构建产物没有人扫,直到渗透测试才被发现。

这次卡住的地方就在「构建注入密钥」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:所有密钥移出 VITE_ 前缀 改由后端签名或代理调用;检查 import.meta.env 的使用位置 逐个确认是否真的需要在前端;构建流水线加一步 grep dist 里的密钥特征;换掉已经泄露的那把密钥并观察调用量。

确认没问题再收工,重新构建后 dist 里搜不到密钥 前端支付改走服务端签名接口。

作者 9823189