免费自查 · 5 分钟 · 无需工具

氛围编程应用在生产环境中出故障的 12 种方式

我们专门审计使用 Lovable、Bolt、v0、Cursor、Claude Code、Codex、ZCode 等 AI 编程智能体构建的应用。相同的缺陷总是一再出现——以下是完整清单、自行发现每个问题的方法,以及对应的修复思路。

咨询早期试用复核 →

第一级 — 本周就可能让你出事

严重风险。任何无聊的机器人或陌生人发现后,都能在几分钟内利用这些问题。

  1. 客户端代码中包含 API 密钥。

    浏览器打包文件里任何可读取的 sk-...,都会在部署后几分钟内被机器人盗取。你还没注意到,OpenAI 的账单就已经来了。

    发现方法:查看页面源代码或开发者工具,在已部署站点中搜索 sk-。修复:把调用移到服务端,并轮换密钥。

  2. 前端暴露 Supabase service_role 密钥。

    该密钥可以绕过所有行级安全策略。如果它出现在客户端代码里,就等于给每位访客授予了数据库管理员权限。

    发现方法:在打包文件中搜索 service_role,或查找载荷中含 "role":"service_role" 的 JWT。修复:绝不发送到客户端;改用 anon 密钥配合 RLS。

  3. 数据表未启用 RLS。

    只有 CREATE TABLE 而没有 ENABLE ROW LEVEL SECURITY,意味着任何拥有 anon 密钥(它本来就是公开的)的人,都能读取、编辑和删除每一行数据,包括其他用户的数据。这是 Lovable/Bolt 应用中最常见的单一泄露原因。

    发现方法:进入 Supabase 控制面板 → 表编辑器,每张表都应显示“RLS enabled”。修复:启用 RLS,并添加按用户隔离的策略。

  4. Stripe 正式环境密钥暴露。

    攻击者可借此发起退款并操纵你的账户。

    发现方法:在打包文件中搜索 sk_live_rk_live_。修复:仅在服务端使用,并在 Stripe 控制面板轮换密钥。

  5. .env 提交到了代码仓库。

    一旦推送到 GitHub——哪怕现在是私有仓库,以后可能转为公开,或被承包商克隆——所有机密信息都会随代码一同流出。

    发现方法:仓库中是否包含真实的 .env 文件?修复:从 Git 历史中彻底清除,轮换全部密钥,并加入 .gitignore。

第二级 — 悄悄让你持续失血

高风险。不会发生戏剧性的入侵,只会造成缓慢而昂贵的损失。

  1. 版本控制中没有访问策略。

    只存在于 Supabase 控制面板中的规则无法接受代码评审,并可能在重新导入时悄无声息地丢失。

    发现方法:你的 supabase/migrations/*.sql 中是否包含策略,还是只在控制面板里点选配置?修复:将策略导出为迁移文件。

  2. 管理路由仅靠客户端守卫保护。

    隐藏按钮并不等于访问控制;底层 API 必须验证角色。否则任何人都能直接调用你的管理 API。

    发现方法:退出登录后直接请求管理 API 端点。它是否仍有响应?修复:在服务端检查角色。

  3. 认证或 AI 端点没有速率限制。

    一段循环脚本就能在你睡觉时烧光 LLM 预算,或暴力破解登录。

    发现方法:在服务端代码中搜索任何速率限制器;如果没有找到,那就是没有。修复:对 /auth 和 AI 路由实施按 IP 限流。

  4. 存在有漏洞的依赖项。

    现成的攻击代码随手可得,攻击者无需任何技术能力。

    发现方法:在项目中运行 npm audit。修复:升级被标记的软件包。

第三级 — 逐步侵蚀信任

中低风险。访客在愿意注册之前,就能直接感受到的那些问题。

  1. 缺少安全响应头。

    没有 CSP、没有 HSTS、页面可被嵌入 iframe——这些都会让小漏洞升级为真正的攻击。

    发现方法:把网址粘贴到 securityheaders.com。修复:在边缘层添加标准安全响应头。

  2. 首次响应缓慢或存在冷启动。

    首字节时间超过约 3 秒,访客会在应用加载前离开。

    发现方法:开发者工具 → 网络 → 停用缓存 → 重新加载,查看第一个请求的 TTFB。修复:使用边缘缓存或更轻量的托管方案。

  3. 死链接与中断的流程。

    这是让首次访问者最快失去信任的方式。

    发现方法:用手机点击着陆页和主要流程中的每个链接。修复:顾名思义,逐一修正即可。

5 分钟自查

浏览器就是唯一需要的工具。如果任何一步发现了问题,就值得进行一次真正的审计。

  1. 打开已部署的应用 → 右键选择查看网页源代码(如果 JS 打包为单独文件,也查看其源代码)。搜索 sk-service_role_live_只要命中任何一项,就立刻停下来并在今天轮换该密钥。
  2. 打开开发者工具 → 网络 → 重新加载 → 逐步操作应用。是否有请求从浏览器直接发往 api.openai.com(或 Anthropic/Google)?这意味着密钥暴露,账单也没有限流保护。
  3. Supabase 控制面板 → 身份验证 → 策略(或表编辑器)。每张表都应显示已启用 RLS。只要有一张表未启用,任何人都可能读取它。
  4. 打开代码仓库。是否提交了真实的 .env 文件?是否存在一个 .admin 路由,让你在退出登录后输入网址仍能访问?
  5. 感受加载速度:开发者工具 → 网络 → 停用缓存 → 重新加载。第一个请求是否耗时数秒?这会让首次访问者直接离开。

全部正常?你已经领先于大多数氛围编程应用。发现任何红灯?这正是我们每天解决的问题。

想让我们帮你梳理这份清单?

我们的扫描器会自动检查它能够观察到的代码仓库、部署包和受限公开站点,并在报告中标明 coverage 状态。控制台状态、认证授权、业务流程和数据所有权需要明确的人工核验。验证期间,部分早期试用扫描可能免费;这不是生产 SLA,也不承诺一定提供修复。

申请早期试用复核 →

表单会自动生成结构化申请邮件;也可以直接写信,包含邮箱、应用名称、公开 HTTPS 网址或公开仓库、构建工具、希望的方案和授权确认。切勿发送密码、Token、API Key、私钥或 .env 文件。