站点上线前安全检查:密钥、路由与缓存
白站或内容站发布到 Vercel 前,用 10 项读者自检排查环境变量泄露、admin 路由暴露、教程媒体路径与 revalidate 遗漏,降低上线一夜回滚的概率。

你将学到什么
你将学到内容站上线前的安全自检思路:环境变量是否只存在于平台面板、admin API 是否要求登录、公开 JSON 是否误带密钥样例、媒体 URL 是否仅允许站内路径、发布后关键路由是否刷新缓存。学完能自己过一遍清单再点 Deploy。Next.js 项目还要确认生产环境关闭本地演示登录、Cron 密钥与 revalidate 密钥使用强随机值,且错误响应不泄露堆栈。上线当天用无痕窗口访问 admin 路由应跳转登录;教程详情页随机抽 3 个 slug 检查封面可访问;回滚演练要求在五分钟内切回上一部署并核对 JSON 正式库版本与时间戳。
适合谁
适合独立开发者或小团队技术负责人,准备把 Next.js 项目第一次推到生产环境,之前只在本地 npm run dev。建议上线前邀请一位同事按清单互查,避免自己熟悉代码而跳过 admin 路由测试。
不适合谁
不适合需要等保、SOC2 级审计的企业;本清单是工程实践级自检,不替代专业渗透测试。 若你团队已有成熟流程,可把本课当对照表查漏补缺,不必推翻现有系统。
上线前自检清单
- 生产环境变量仅在 Vercel/平台配置,仓库与 `published.json` 无真实 API Key
- `/api/admin/*` 与账号运营页在生产环境要求登录,本地演示登录已关闭
- robots 与站点地图包含新教程 slug,无指向已删教程的 404
- 教程封面与正文图片均为站内教程图目录静态路径,无本机地址或带签名临时链
- 发布后刷新首页、教程列表、详情页与站点地图缓存
- Cron/Actions 密钥与 `SANITY_REVALIDATE_SECRET` 使用强随机值且未提交 Git
- 依赖漏洞:`npm audit` 无 blocking 级未处理项(或已有豁免记录)
- 错误页不打印堆栈到公开响应;`NODE_ENV=production` 下关闭详细 debug
- 第三方 OAuth 回调域与生产域名一致,无遗留 staging 回调
- 回滚方案:保留上一版部署 ID 与数据库/JSON 备份时间点
常见踩坑
只刷新首页忘记教程详情,分享链接仍显示旧摘要。把本地测试 Key 复制到生产会导致权限过大与账单异常。admin 路由若未加登录守卫,爬虫可能扫到运营接口,生产务必走真实账号会话。教程 JSON 里误贴密钥样例会在审稿阶段被拒,发布前应用占位符。把自检清单贴在发布频道置顶,新人上线也必须逐项勾选,避免老司机凭感觉点 Deploy。OAuth 回调域留 staging 地址会导致生产登录失败。
本课小结
带走可打印的 10 项清单,发布当天逐项勾选。安全不是一次扫描,而是每次加新 API 或新教程系列都重复最小检查。 下一课可继续本系列实战,把模板保存为团队默认文档。