工作坊讲义:你的 vibe coding 应用安全吗?

方向键翻页。按 F 全屏,按 N 显示演讲者备注。

你的 vibe coding 应用安全吗?

一场面向 AI 开发者的 Vibe 动手工作坊

vibe1 / 24

代码由 AI 来写,后果由你承担。

vibe2 / 24

谁来告诉 vibe coder 这些事……

Rate limiting · Idempotency(幂等性)· Row-level security(行级安全)· 超时 · Webhook · 密钥 · Rollback(回滚)· 备份 · Prompt injection(提示词注入)· 还有 102 项

vibe3 / 24

摆事实

  • 约 44% 的 AI 代码生成任务引入了已知漏洞(Veracode,2026)
  • 170+ 个应用因为缺失一条数据库策略而暴露(CVE-2025-48757)
  • 1 个 AI agent 在代码冻结期间删除了线上生产数据库(2025 年 7 月)
vibe4 / 24

第 1 部分:思维方式

20 分钟

vibe5 / 24

AI 代码的出错方式是可预测的

  • 它检查你是谁,却不检查哪些东西归你
  • 它图方便,把密钥随手放在任何地方
  • 它只写顺利路径(happy path),把错误悄悄吞掉
  • 它在循环里查数据库
  • 它会编造根本不存在的依赖包
  • 它什么都没跑,就说"完成了,所有测试都通过"
vibe6 / 24

五个视角

  1. 对手。 如果用户是攻击者呢?
  2. 规模。 如果 1,000 个人同时这么做呢?
  3. 故障。 如果我调用的服务很慢或者挂了呢?
  4. 变更。 我怎样安全地上线,又怎样安全地撤回?
  5. 可见性。 它坏了,我到底怎么才能知道?
vibe7 / 24

影响范围(blast radius)

  • A. 可撤销、仅限自己:放心上线
  • B. 涉及用户数据:访问控制和备份
  • C. 涉及资金或身份:幂等性、审计、测试
  • D. 不可撤销或对外的操作:人工审批和紧急停止开关(kill switch)
vibe8 / 24

第 2 部分:认识 Ledgerly

一份真实的应用规格,配 14 项安全测试。10 分钟

vibe9 / 24

环境准备

cd vibe-starter
npm install
npm run score

预期结果:0 / 14 通过

vibe10 / 24

规则

  • 每个功能都用 AI 助手来实现
  • 接受之前,逐个读完每一处 diff
  • 绝对不要改测试
  • 在 AI 写任何代码之前,先让它解释那个失败的测试
vibe11 / 24

第 3 部分:谁能看到什么?

访问控制、注入、密钥。50 分钟

vibe12 / 24

访问控制失效是头号风险

OWASP Top 10:2025,A01。应用检查了你有没有登录,却没检查这张发票是不是你的。

试一试: 让你的 AI 实现发票接口。以 Bob 的身份登录,然后改掉发票 ID。你看到的是谁的发票?

vibe13 / 24

密钥不该出现在浏览器里

前端 bundle 里的任何东西都是公开的。打开开发者工具,搜索 sk_。

密钥一旦泄露,就要轮换。 删掉文件并不会删掉 git 历史。

vibe14 / 24

实验:通过测试 01 到 07

访问控制、SQL 注入、密钥、XSS、rate limiting、密码哈希、N+1

目标分数:7 / 14

vibe15 / 24

休息

15 分钟

vibe16 / 24

第 4 部分:出问题的时候

超时、webhook、race condition(竞态条件)。40 分钟

vibe17 / 24

网络会在半路失败

  • 每个对外调用都需要超时
  • 重试需要 idempotency(幂等性),否则客户会被扣两次款
  • Webhook 需要签名校验和去重
  • 先检查再执行(check-then-act)需要原子更新
vibe18 / 24

第 5 部分:当输入本身就是攻击

SSRF 和 prompt injection(提示词注入)。40 分钟

vibe19 / 24

致命组合

当一个 AI agent 同时具备以下三点时,它就是危险的:

  1. 能访问私有数据
  2. 会接触不可信内容
  3. 有办法执行操作或把数据发出去

每个任务都要砍掉其中一条腿。

vibe20 / 24

实验:通过测试 08 到 14

目标分数:14 / 14

vibe21 / 24

第 6 部分:带回家

20 分钟

vibe22 / 24

接下来的 7 天

  1. 对你的真实应用做一次密钥扫描,发现的密钥全部轮换
  2. 开启 row-level security(行级安全),并用第二个账户测试
  3. 给每个付费 API 密钥设置消费上限
  4. 给每个对外调用加上超时
  5. 做一次备份恢复,并记录耗时
vibe23 / 24

保留 vibe,补上证据。

vibe.jayren.ai

vibe24 / 24

演讲者备注