2026-04-03 打卡

1. 今天学了什么 / 做了哪些具体操作

全量代码审计

喵喵对 AI Text Humanizer 项目做了完整代码审查,覆盖所有 API 路由、认证逻辑、支付流程、数据库操作。发现 12 个问题,全部修复并部署上线。

安全修复(4 项)

  • Admin API 硬编码密码:删除 token === "xdx54321:mm5822655" 硬编码比对,仅保留 env var LOG_ADMIN_KEY 校验
  • 积分扣除静默失败deductCredits().catch(() => {}) → await + 打印 [CREDIT_ERROR] 日志,方便事后补扣
  • 积分余额泄露:错误信息从 (${credits} left, need ${needed}) 改为通用提示
  • Checkout 降级保护:新增 PLAN_HIERARCHY 比较,已购 Pro 的用户无法重复买 Basic

功能补全(5 项)

  • subscription_updated webhook:处理用户升降级,active/paid → 更新 plan,expired/cancelled → 降为 free
  • Success 页面改版:从静态文字改为调用 /api/user-plan 显示当前套餐、可用字数、账号信息
  • error.tsx:500 错误页,带重试按钮和返回首页链接
  • not-found.tsx:404 页面,带返回首页链接
  • robots.txt + sitemap.xml:SEO 基础,提交给搜索引擎

安全加固(3 项)

  • public/_headers:5 个安全响应头(X-Frame-Options: DENY、X-Content-Type-Options: nosniff、Referrer-Policy、Permissions-Policy、X-XSS-Protection)
  • CORS 注释:补充说明 CORS 不是认证屏障,JWT 才是
  • Turnstile 注释:说明已登录用户跳过 Turnstile 的原因(auth check 在前面)

自动化测试

  • Admin 旧密码 → 401 ✅
  • Admin 新密码 → 200 ✅
  • robots.txt → 正常 ✅
  • sitemap.xml → 3 个页面 ✅
  • 安全头 → 5 个全部返回 ✅
  • 404 页面 → 404 ✅
  • 未登录 humanize → 401 ✅
  • 未登录 checkout → 401 ✅
  • Webhook 无签名 → 401 ✅

2. 解决了什么问题 / 有什么新认识 / 哪些地方需要改进

解决的问题:

  1. 硬编码密码一旦代码泄露整个后台就裸了
  2. 积分扣费失败用户白嫖但完全无感知,无法事后追回
  3. 订阅升降级没有处理,用户升级后 plan 不会自动更新
  4. 缺少基础 SEO 和错误页面,用户体验不完整

新认识:

  1. CF Pages 的 _headers 文件可以方便地加安全头,不需要 middleware
  2. Next.js 的 not-found.tsx 不能用 "use client" + framer-motion(静态预渲染会崩),要保持服务端组件
  3. sitemap.ts 是 Next.js 内置约定,不需要额外配置就能生成 sitemap.xml
  4. 代码审计要从攻击者视角看——如果我是恶意用户,能怎么利用这个系统

需要改进:

  1. 安全头里没加 CSP(Content-Security-Policy),因为 Next.js 大量使用 inline scripts/styles,加 CSP 需要配合 nonce,复杂度较高,后续再处理
  2. 历史数据存储策略还是 TODO 状态,用户量上来后需要清理机制

3. 有收获、进步、新知识的学习、成果都算好事

  • 完整做了一次安全审计 → 从发现问题到修复到测试到部署全流程闭环
  • 学会了用 curl 做系统性的 API 测试
  • 加深了对"深度防御"的理解:CORS + JWT + webhook 签名 + 降级保护,每一层都有自己的职责

4. 接下来要学什么 / 做什么(可执行的规划)

  • [ ] LemonSqueezy 切 Live Mode
  • [ ] 确认产品定价(前端 vs LS Dashboard 对齐)
  • [ ] Product Hunt 发布准备(文案、截图、tagline)
  • [ ] 接入 Sentry 监控