指南

Vibe Coding 安全吗?真实风险与发布前必查事项

Vibe coding 适合个人工具和原型,对于有真实用户的正式应用,它也可以是安全的,但前提是你要补上“只要描述出来、看看效果就行”这种做法所跳过的检查。真正危险的问题从屏幕上是看不出来的:用户能打开彼此的数据、密钥被放在浏览器里、公开表单没有任何限制。本指南讲解真正会造成麻烦的风险、如何处理密钥、需要多少审查,以及发布前要做的 30 分钟检查。

完整的技术清单请参阅我们的AI 构建应用安全检查清单。本页是为不读代码的人准备的、更简短实用的版本。

为什么 vibe coding 有自己的风险

做 vibe coding 时,你是通过使用应用来判断它好不好的。这能发现按钮失灵和布局难看的问题,却发现不了只有在别人以不同于你的方式使用时才会出现的问题:陌生人、机器人,或是在地址栏里乱改网址的好奇用户。

AI 模型写出的代码大多看起来合理,而且大部分确实没问题。但它们往往针对你所要求的内容进行优化——“让仪表盘显示我的项目”——却可能不会添加你没提到的保护——“并且不显示别人的项目”。解决办法不是停止使用 vibe coding,而是明确地要求这些保护,然后去测试它们。

你的应用风险有多高?快速评估

你的应用风险你需要什么
只有你自己使用、不含敏感数据的个人工具低把密钥移出代码,基本就够了。
带表单的公开网站或落地页低到中表单限制、机器人防护、页面中不含密钥
用户注册并存储自己数据的应用中本页的全部内容
涉及支付、健康、金融、儿童或证件数据高本页的全部内容,外加开发者审查

请诚实地判断你属于哪一类。很多应用一开始属于第一类,却在没有人做出决定的情况下慢慢滑向第三类。

真正会造成麻烦的风险

1. 用户能看到彼此的数据

这是 AI 构建的应用中最常见也最严重的问题。页面只向每个用户展示他自己的记录,所以看起来一切正常。但如果有人在地址栏或请求中改掉 ID,服务器就会返回任意一条记录。因为你总是用自己的账号测试,所以永远看不到这个问题。

如何检查: 创建两个账号。用 A 登录,打开 A 的一条记录并记下地址。在无痕窗口中用 B 登录,粘贴该地址。你应该看到“未找到”,而不是 A 的数据。

提示词:

检查每一个读取、修改或删除用户数据的服务端接口。每个接口都必须确认已登录用户有权访问该特定记录。列出这些接口,说明每个接口如何检查权限,并修复任何没有检查的接口。

2. 密钥放错了地方

密钥是任何能授予访问权限的东西:AI 或邮件服务的 API 密钥、数据库密码、支付服务商的私钥。如果它位于运行在浏览器中的代码里,任何人都能打开开发者工具把它复制走。如果它被提交到了公开仓库,机器人几小时内就会找到它。

如何检查: 直接问 AI。

列出这个应用使用的每一个 API 密钥、令牌和密码。对每一个,说明它存储在哪里,以及它是否会被发送到浏览器。把所有位于代码中或前端的密钥,迁移到服务端的密钥管理中。

3. 没有限制的公开表单和接口

联系表单、注册和 AI 功能都会被机器人发现。如果没有限制,你会收到垃圾信息、虚假账号,或者因为 AI 接口被调用上千次而收到一笔高额账单。

提示词:

为注册、登录、联系表单以及每个调用 AI 服务的接口添加频率限制。为公开表单添加蜜罐字段。告诉我你选择的限制值。

4. 信任浏览器

任何由浏览器决定的内容都可以被用户修改:价格、折扣、测验答案、“是否管理员”标记。真正重要的规则必须在服务器端执行。

提示词:

找出所有由浏览器决定、而本应由服务器决定的地方:价格、总额、权限、角色、分数。把这些检查移到服务器端。

5. 没有退路

一次错误的修改,或一个恶意用户,都可能删除数据。如果没有备份也没有回滚方式,一个小失误就会变成永久损失。请确保你的工具为代码提供检查点,为数据库提供备份。参见如何备份应用数据库。

正确处理密钥

密钥造成的可避免损失比其他任何问题都多,所以规则集中列在这里:

  • 永远不要把真实密钥粘贴到聊天中。 聊天内容会被保存、分享和截图。请把密钥放在工具的密钥管理或环境变量中。(什么是环境变量和密钥。)
  • 从服务器调用付费服务。 浏览器请求你的服务器;服务器用密钥去调用 AI 或支付服务。
  • 测试与正式使用分开用密钥,这样泄露的测试密钥就不会动到真实资金。
  • 在 AI 和邮件服务商的后台设置消费上限。
  • 怀疑密钥泄露时立即轮换。 先创建新密钥,更新密钥配置,然后删除旧密钥。

在 Mythex 上,密钥保存在项目设置中而不在代码里,智能体可以使用它们,而密钥的值不会出现在聊天中。我们关于如何保护 API 密钥的指南涵盖了更多服务商。

需要多少代码审查?

Vibe coding 意味着你不需要阅读每一行代码。你也确实没有必要。但对于某些代码,应该有人去看。

  • 个人工具: 除了这里的检查,不需要其他审查。
  • 有用户账号的应用: 审查登录和数据访问的工作方式。你可以让 AI 用通俗的语言解释一遍,并检查解释是否符合你的预期。
  • 涉及支付或敏感数据的应用: 请开发者检查认证、权限、支付处理以及任何存储个人数据的部分。这需要他们几个小时,而不是重写。

即使没有开发者,下面这个提示词也很有用:

用通俗的语言解释,这个应用如何判断一个用户是谁,以及他被允许看到什么。指出相关文件。然后列出你认为安全审查人员应该关注的任何内容。

我们关于如何审查 AI 生成的代码的指南解释了审查人员关注什么,你可以把它交给负责审查的人。如果你的工具允许导出代码或同步到 GitHub,安排审查就很容易;在 Mythex 上,这两项都属于 Pro 功能。

发布前 30 分钟检查

在把链接分享给圈子之外的人之前,先完成这项检查。

访问权限(10 分钟)

  1. 两个账号、两个浏览器:B 能否通过网址打开 A 的记录?正常情况下不应该能。
  2. 退出登录,直接访问每个页面的地址。私密页面应该把你重定向到登录页。
  3. 以普通用户身份打开管理员地址,应该被拒绝访问。

密钥(5 分钟)

  1. 使用上面的提示词,让 AI 说明每个密钥存放在哪里。
  2. 打开应用,查看页面源代码,搜索“key”“secret”和“token”。

表单与滥用(5 分钟)

  1. 把每个表单留空提交,输入超长文本,并快速连续提交两次。
  2. 确认注册、登录以及任何 AI 功能都有频率限制。

数据与恢复(5 分钟)

  1. 清楚数据存放在哪里,以及如何恢复。
  2. 确认可以把代码回滚到之前能正常运行的版本。

法律与基础设置(5 分钟)

  1. 如果你收集个人数据,添加隐私政策并说明收集了哪些内容。参见如何撰写服务条款和隐私政策。
  2. 确保发布的应用使用 HTTPS。大多数构建工具(包括 Mythex)都会替你处理这一点。

如果全部通过,你的早期上线就基本没问题了。每次对登录、角色或数据做重大改动后,重复第 1–5 步。

vibe coding 平台提供什么保护,又不提供什么

好的平台会处理大量基础设施工作:HTTPS、隔离的工作空间、每个项目一个数据库、密钥存储、备份和回滚。Mythex 为每个项目提供私有工作空间和数据库,把密钥放在代码之外,并在每次成功修改后保存一个检查点,让你可以撤销。

但没有任何平台能了解你应用的规则。只有你知道客户不应该看到彼此的账单,或者某张优惠券只能使用一次。这些规则必须写进你的提示词,并通过你的测试来确认。

简短结论

Vibe coding 的安全程度取决于你所做的检查。对于个人工具,把密钥移出代码,放心使用即可。对于涉及他人数据的应用,每次上线前都要完成上面的 30 分钟检查,并让开发者审查支付和敏感数据部分。想了解这些风险在真实项目中是什么样子,请阅读我们的 vibe coding 案例;想从一开始就带着这些检查来构建,请参阅如何用 vibe coding 构建应用。

常见问题

Vibe coding 安全吗?

用于个人工具和原型、且不涉及敏感数据时,它是安全的。对于允许他人注册、存储数据或付款的应用,只有在补上 vibe coding 常常跳过的检查之后才算安全:服务端的访问规则、不写进代码的密钥、对公开表单的限制,以及对涉及资金或个人数据部分的审查。

vibe coding 应用最大的安全风险是什么?

访问控制失效:一个已登录的用户可以读取或修改另一个用户的数据,通常只是改一下请求中的 ID。用自己的账号测试时永远发现不了,所以这类问题非常常见。应该用两个账号专门测试它。

AI 生成的代码会泄露我的 API 密钥吗?

会,如果密钥出现在运行于访客浏览器中的代码里,或者被提交到了公开仓库。请把密钥保存在工具的密钥管理或环境变量中,从服务器端调用外部服务,并让 AI 列出每个密钥被用在哪些地方。

vibe coding 应用需要开发者审查吗?

个人工具或早期原型不需要。在你要直接收款、存储健康、金融或儿童数据,或者向大量用户开放之前,应该请开发者审查。导出代码或 GitHub 访问权限会让审查更容易安排。

在 vibe coding 平台上,我的代码和数据安全吗?

这取决于平台,请阅读其安全和隐私页面。在 Mythex 上,每个项目都运行在自己的私有工作空间中,拥有独立的数据库;密钥存放在代码之外;检查点让你可以回滚有问题的修改。但应用自身的逻辑仍需要本指南中的检查。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)