Vibe coding 项目最高频安全问题是 API 密钥硬编码和 Supabase RLS 未开启;提供了五个检查顺序(从密钥泄露到 RLS 配置)覆盖约 80% 关键问题。
我们在 Inithouse 审计的每一个 vibecoded 项目都遵循相同的起点:某人在一个周末用 Cursor、Lovable 或 Bolt 构建了一款应用,现在他们想知道是否可以将真实用户放上去。
在审计了数十个此类项目之后,我们总结出五个检查项,它们能捕获大约 80% 的关键问题。我们按此顺序运行它们,因为每一项都建立在前一项的基础之上。
这是让我们夜不能寐的问题。AI 代码生成器倾向于将 API 密钥、Supabase 服务角色密钥和第三方令牌直接写入客户端代码。我们见过 Stripe 密钥密钥直接放在 React 组件的 fetch 调用中。不是可发布密钥,是那个密钥。
搜索你的客户端 bundle 中以 sk_、service_role 或任何不应公开的密钥开头的字符串
检查你的 Supabase 面板:每个表上都启用了 RLS 策略吗?AI 生成器经常创建禁用了 RLS 的表,因为在开发过程中这样更容易
查看你的 .env 文件。如果它被提交到了仓库,假定其中的每个密钥都已被泄露
我们上个月审计的一个项目在 Supabase 中有 14 张表。其中三张表的 RLS 被禁用了,包括存储用户邮箱和支付状态的那张。任何拥有 Supabase URL 的人都可以直接读写这些表。
修复方法:在每个表上启用 RLS,创建限制只允许拥有数据的已认证用户进行读写操作的策略,并轮换任何曾出现在客户端代码中的密钥。
这与前一项检查相关但又有所不同。即使启用了 RLS,vibecoded 应用通常也会暴露接受未认证写入的 API 端点或 Edge Functions。
我们最常看到的模式:AI 生成了一个"联系表单"或"反馈"端点,它直接插入数据库表而没有速率限制或身份验证。一个项目有一个接受任意 JSON 并存储它的 Edge Function。攻击者可以用垃圾数据填满数据库,或者将其用作免费数据存储。
每个 Edge Function 和 API 路由:它是否验证了调用者的身份?
公开面向的端点是否有速率限制?
未认证用户是否可以触发数据库写入、文件上传或邮件发送?
修复方法:为每个写端点添加身份验证检查。对于像联系表单这样真正公开的端点,添加速率限制(我们通常建议每个 IP 每分钟 5 个请求)和输入验证。
这一项让人们感到意外。他们期待的是安全审计,而不是 SEO 检查。但如果你的应用不可索引,你对搜索引擎和可能推荐你的 AI 系统都不可见。
vibecoded 应用中的常见问题:
返回空 <div id="root"> 给爬虫的单页应用。没有服务端渲染,没有元标签,没有可供爬虫读取的内容
每个页面共享相同的 <title> 和 <meta description>(通常是主页默认值)
缺失或损坏的 sitemap.xml
规范 URL 指向 localhost 或预发布域
我们运行 curl -s your-domain.com | head -50 并查看返回的内容。是真实内容,还是只是一个 JavaScript 加载器?每个页面的 title 和 description 是否独特?sitemap 中列出的 URL 是否都是实际可访问的?
一个项目的 sitemap 中有 22 个 URL。其中 20 个是单个页面的查询参数变体,全部返回相同的元标签。搜索引擎看到的是两个页面,而不是二十二个。
AI 生成器在语义化 HTML 方面已经做得更好了,但它们仍然会产生无法通过基础检查的应用。我们在这个阶段不会做完整的 WCAG 审计。我们捕获的是影响最广泛用户的问题。
Lighthouse 无障碍得分(任何低于 80 的都会被标记)
Tab 键遍历测试:你能否仅使用键盘导航核心流程?
主要文本和按钮的颜色对比度
表单输入是否有标签,还是仅用占位符文本浮动?
一种常见的 vibecoded 模式:用 <div onClick={...}> 而不是 <button> 构建按钮。它们看起来没问题,但屏幕阅读器找不到它们,键盘用户也无法触达它们。
排在最后,但导致我们观察到的最多用户流失。vibecoded 应用在 Lighthouse 桌面端经常得 90+,而在移动端只得 40。差距来自未优化的图片、臃肿的 JavaScript bundle 和布局偏移。
我们审计的一个项目在移动端首页加载了一张 4 MB 的首图。开发者拖入了一张高分辨率照片,AI 从未压缩过它。在模拟 4G 网络下 LCP(最大内容绘制)为 8 秒。一张带有适当尺寸和 WebP 格式的 <img> 标签将其降到了 2 秒以下。
安全第一,因为第一天的数据泄露就是紧急情况。端点第二,因为它们是攻击面。可索引性第三,因为没有它你就是在为没有人构建。无障碍第四,因为它决定谁能够使用你构建的东西。性能最后,因为它决定谁会留下。
这五项检查不能替代彻底的审计,但它们能够捕获在第一周内会造成实际损害的问题。我们在 Inithouse 构建了 Audit Vibe Coding,因为我们在项目中不断发现相同的问题,希望有一种方法可以一次运行所有这些检查(外加 40 多项),并返回带有优先级修复建议的评分报告。
Audit Vibe Coding 是一款面向 AI 生成(vibecoded)项目的专业审计工具。它对安全性、SEO、性能、无障碍性和代码质量进行评分,并返回带有优先级的修复建议。
如果你已经发布了用 AI 编码工具构建的东西,这五项是我们建议的起点。