Skip to content
⚡ 高效工作流第 6 / 6 节

成本与安全:密钥、账单和沙箱三道防线 ​

先给答案:vibe coding 的安全不是玄学,是三道能亲手设的防线——密钥看紧、账单上锁、沙箱圈地。 三道设完,「这次我全盘接受」才说得出口。这一课把 API 密钥安全、费用控制和命令边界收成一份 10 分钟能走完的清单。

为什么这一课排在验收之后?验收检查 的红线查的是「AI 写的代码里有没有藏雷」;这一课往前一步,看的是你自己的家底——API 密钥、账单、电脑里的文件。2025 年 7 月那个真实案例值得再念一遍:Replit 的 AI 代理在用户明确说「不可做任何变更」之后,仍然删掉了正式环境的数据库(案例详见 Vibe Coding 靠谱吗:风险、争议与真实案例)。口头禁令挡不住 AI,系统边界才挡得住。

这一课就是 工作流导读 立的第五条纪律「成本与安全设防线」:密钥看紧、计费设上限、能用沙箱就用沙箱。

四款工具(Claude Code、Codex、OpenCode、WorkBuddy)通用,零基础 10 分钟走完。

学完你能做什么 ​

  • 给手头的 API key 做一遍密钥安全体检:没写死在代码里、没提交进仓库、知道它存在哪、会被发到哪
  • 分清订阅、按量、积分三种扣费方式的风险差别,给按量计费的通道设好消费上限,知道去哪看本月花了多少
  • 用 Claude Code 的 /sandbox 打开沙箱,并用两条探针命令验证它真的关得住;说得出 Codex 的沙箱默认开在哪里
  • 过一遍数据隐私与网络公民两问:这个项目碰我的私人数据吗?数据会不会离开我的机器?

你现在的困境 ​

  • 吓人的故事听了一堆:API key 泄露被人拿去刷账单,一晚上几千块;AI 代理「自作主张」删了正式环境的数据库——轮到自己上手,不知道该防哪、怎么防
  • 工具让你「全权代理」,你却不知道它的命令能碰到电脑里的哪些文件:SSH 密钥、云服务凭证、浏览器配置,它是不是都能读?
  • 想给 AI 设个花钱上限,翻遍设置没找到开关;订阅感觉是封顶的,可又听说有人照样收到天价账单

什么时候用这一招 ​

当你需要:

  • 在把项目交给 AI 全权代理之前,把密钥、账单、文件边界三样家底先看好
  • 第一次接入按量计费的 API key(OpenCode 接国产模型就是这么玩的)
  • 判断一个新项目配不配得上「全盘接受」的原版玩法

而且不想:

  • key 泄露了才发现「代码里原来一直明文写着密钥」
  • 月底收到账单,才知道 AI 一晚上烧了多少 token
  • AI 的命令在你整台电脑上畅通无阻

🎒 开始前的准备 ​

核心思路 ​

三道防线的本质:不赌 AI 不闯祸,只保证闯了祸也伤不到你。 工程师 Simon Willison 在「When is it OK to vibe code?」小节里给新手列过一份安全清单,这一课把其中能「动手设」的三件收成三道防线:

防线管什么对应 Willison 清单不设的后果
一:密钥API key、密码、token 的存放和暴露面第 2 条「注意密钥」key 写死进代码、跟着仓库公开,被人拿去刷你的账单
二:账单按量计费的花费上限和用量可见性第 5 条「钱在线上」对无计费上限的 API vibe coding,一晚烧出数千美元
三:沙箱AI 命令能碰的文件和网络范围「新手的安全从沙箱开始」AI 的命令读走 ~/.ssh 里的凭证、删掉不该删的目录

清单里另外两条不配「防线」等级、但 30 秒能过完:数据隐私(第 3 条)和网络公民(第 4 条),放在本页第 4 步;第 1 条「低风险项目」和第 6 条「找人把关」在 验收检查 已经立过规矩——按「给谁用」定强度。

为什么沙箱能单独算一道防线?Willison 的原话:「Safe vibe coding for complete beginners starts with a sandbox」——完全新手的安全 vibe coding,从沙箱开始。他举的正面例子是 Claude Artifacts:代码锁在隔离环境里、只能加载批准的库、不能对外发网络请求;同时他提醒,另一些热门工具「safety rails 少得多」。你本机跑的 Claude Code 和 Codex 也有自己的沙箱,这一课教你打开它、验证它。

三道防线的分工记法:防线一和防线二防「损失」,防线三防「越界」。 Replit 案例里 AI 越过的就是边界——所以别把希望寄托在提示词里的「不要乱动」,要把边界画在操作系统层面。

跟我做 ​

(拿你手头正在做的 AI 项目当素材,四步走完:先看密钥,再锁账单,然后开沙箱,最后顺手过两道小检查。)

第 1 步:守好 API 密钥安全——不写死、不进仓库、知道存在哪 ​

为什么:Willison 清单第 2 条把密钥问题说透了:API key 这类东西「形状像密码」(anything that looks similar in shape to a password),代码一旦涉及密钥,你就必须看懂这段代码怎么工作的,否则很容易无意间把它暴露出去。验收检查 的红线查的是「密钥有没有被写进代码」;这一步再往前一步,把密钥的存放、暴露面、去向整个看一遍。

三条守则,逐条过:

守则一:不写死。 密钥不硬编码在代码里,放环境变量或配置文件。OpenCode 接自定义模型商的官方写法就是范本——配置里只写环境变量的名字,值留在环境里:

jsonc
"env": ["ACME_API_KEY"]

守则二:不进仓库。 存密钥的文件不提交进 Git 仓库,项目要公开前再全局搜一遍 key、secret、token、password(验收检查 第 3 步红线一的查法,直接搬来用)。

守则三:知道存在哪、会被发到哪。 四款工具的凭证放法各不相同:

工具密钥放在哪你要确认的事
Claude Code官方说明:API key 和 token 在 macOS 存钥匙串,Linux 存权限 0600 的文件,Windows 继承用户目录的访问控制工具已经替你保管了——别再复制进项目里「图方便」
Codex以 ChatGPT 账号登录(Sign in with ChatGPT),不手工管 key没有 key 可管,账号本身就是凭证
OpenCode/connect 里粘贴 key,或按上面的 env 写法接环境变量你贴的 key 通常是按量计费的——这道门直通防线二
WorkBuddy微信扫码登录,平台内积分制不涉及自带 key,重点是账号别借人

涉及密钥的代码,让 AI 把去向讲给你听(本页第一个魔法模板):

text
这个项目里所有像密钥的东西(API key、token、密码)分别是什么、
存放在哪个文件?它们会被发送到哪些地址?会不会跟着仓库公开?
逐个说明,就当我完全不懂代码。

你应该看到:一份密钥清单——每个密钥的存放位置、发送去向、会不会公开,三项都有答案。答不上来的,要么追问到懂,要么把 key 换掉再用。

  • 小检查:项目里每个密钥,我都知道「存在哪、发到哪、会不会公开」三件事

第 2 步:给账单上锁——按量计费先设上限再动手 ​

为什么:Willison 清单第 5 条是他见过的真实惨案:「对没有计费上限的 API vibe coding,racked up thousands of dollars in charges」——数千美元账单。他的结论:对一切按用量计费的东西 vibe coding,都要非常小心。AI 修不好会重试、会循环、会一口气跑几小时,每一次都是钱。

先分清你的钱是哪种扣法,再决定锁多大:

扣法谁是这种到顶了会怎样你要做的事
订阅档位Claude Pro/Max/Ultra、ChatGPT 各档、OpenCode Go、WorkBuddy 各版套餐用量到顶就暂停,不会按量滚雪球记住去哪看用量
订阅 + 额外用量Claude 订阅开了 usage credits(超出套餐继续用)额外部分按量计费,要单独设月度上限设上限(第 1 招)
纯按量Claude Console/API 账号、OpenCode 自带 key 接模型商没上限就是裸奔必须设上限(第 2 招)
积分制WorkBuddy积分按月发放、当月有效不结转——天然月度天花板知道余额入口

第 1 招:订阅用户——找到用量入口,开额外用量前先设月度上限。

在 Claude Code 里跑 /usage:订阅用户看到的是套餐用量条、活跃统计和用量构成(Session 成本那一栏是给 API 用户的,订阅用户不用管它)。想开 usage credits 的,去 claude.ai 的 Settings > Usage:开关 usage credits、看余额、本月消费和月度消费上限都在这一页(CLI 里跑 /usage-credits 能直接打开它)。开之前,先把月度上限设成你这个月愿意承受的数字。

官方行为提前知道:Pro/Max/Ultra 到达消费上限时,Claude Code 会提示你「提高或移除上限」——看到这个提示时想清楚再按,别顺手点了移除。

第 2 招:API / 自带 key 用户——在发 key 的后台设硬上限。

Claude Console(API)用户:Console 里可以给工作区设总消费上限(workspace spend limits),费用和用量报表也在同一处;第一次用 Console 账号登录 Claude Code 时,还会自动建一个叫 "Claude Code" 的工作区专门归集这块花费。OpenCode 自带 key 的用户:key 是模型商发的,上限就去模型商账号后台找消费上限类的功能设好——各家后台有没有这个功能以厂商为准。

第 3 招:无人值守运行——命令行给这一次运行封顶。

让 Claude Code 自己跑长任务(非交互的 print 模式)时,加 --max-budget-usd,本次运行的 API 花费估算一到数就停:

bash
claude -p --max-budget-usd 5.00 "帮我重构这个项目并跑通测试"

官方提醒三点:这是客户端估算,可能和账单有出入;子代理的花费也计入;实际花费可能略过线,设的时候留点余量。

你应该看到:订阅用户——/usage 打得开,知道自己套餐用量条在哪看;API 用户——工作区上限数字已设好;无人值守脚本——命令里带着 --max-budget-usd。

  • 小检查:我的每个付费通道都知道「上限在哪设、用量在哪看」;按量计费的至少有一个硬上限

第 3 步:打开沙箱——给 AI 的命令划一个活动边界 ​

为什么:AI 跑的 shell 命令,默认能碰你用户账号能碰的一切——Claude Code 官方文档明说,沙箱的默认读权限覆盖大半个系统,包括 ~/.ssh 和 ~/.aws/credentials 这类凭证文件。这就是为什么它单独算一道防线:提示词里写一百遍「不要乱动」,不如操作系统层面画一条它跨不过去的线。四款工具的沙箱现状:

工具沙箱状态怎么开 / 确认
Claude Code默认关会话里跑 /sandbox 打开面板;或 ~/.claude/settings.json 里设 sandbox.enabled: true
Codex默认权限模式自动带沙箱macOS 开箱即用;Linux/WSL2 装 bubblewrap;Windows PowerShell 用原生沙箱,WSL2 用 Linux 沙箱
OpenCode官方文档没有同类沙箱开关你的主防线是防线一和防线二——自带按量 key 时尤其如此
WorkBuddy默认权限模式自带沙箱约束保持输入框底部的「默认权限」:命令优先在沙箱内执行、文件访问以工作空间为边界;别随手开「允许完全访问」

用 Claude Code:三步打开,两条探针验证。

沙箱是操作系统强制执行的边界:文件能写哪里、网络能去哪里,圈外一律拒绝。打开方式:会话里跑 /sandbox,面板里选模式(auto-allow = 圈内命令不再逐条问你;regular = 照旧逐条确认)。平台差异提前知道:

  • macOS:用系统自带的 Seatbelt,零依赖直接用
  • Linux/WSL2:要装 bubblewrap 和 socat(Ubuntu/Debian:sudo apt-get install bubblewrap socat;Fedora:sudo dnf install bubblewrap socat)
  • 原生 Windows:不支持沙箱,命令默认裸跑——要沙箱就在 WSL2 里跑 Claude Code

开完必须验证(官方给的探针,让 Claude 去跑,你自己敲的命令通常在沙箱外,测不出来):

探针命令沙箱生效时你应该看到
touch ~/sandbox-probe报错 Operation not permitted(macOS)或 Read-only file system(Linux/WSL2)
curl --noproxy '*' https://example.com报错 Could not resolve host(网络没有直连出口,全走本机代理按允许域名放行,域名清单初始为空)

⚠️ 沙箱起不来时,默认是裸跑

官方警告:沙箱因为缺依赖或平台不支持而启动失败时,Claude Code 默认无沙箱继续跑命令。要它宁可退出也不裸奔,设 sandbox.failIfUnavailable: true。验证探针「成功」了,就回去查依赖和开关。

用 Codex:确认平台在默认沙箱覆盖内。

Codex 的默认权限模式自动应用沙箱,不用你手动开——但 Linux/WSL2 要先装 bubblewrap(sudo apt install bubblewrap 或 sudo dnf install bubblewrap),缺了它会警告。官方对这两个控件的关系说得很清楚:沙箱定义技术边界,审批策略决定 AI 越界前要不要停下来问你——两者配合,不是二选一。

你应该看到:Claude Code——/sandbox 面板显示沙箱已启用,两条探针都撞墙报错;Codex——Linux 上装好了 bubblewrap,启动无警告。

  • 小检查:用 Claude Code 的话两条探针都验证过关;用 Codex 的话确认过自己平台在默认沙箱覆盖内

第 4 步:顺手两道小检查——数据隐私与网络公民 ​

为什么:Willison 清单还有两条,不配「防线」等级,但各花 30 秒就能过完,顺手做掉。

隐私一问:这个项目会碰到我不想屏幕共享时公开的私人数据吗?会的话,Willison 的要求很严格——你要非常确定数据有没有可能离开你的机器;确定不了,就别把数据喂进去。第 3 步的沙箱网络隔离,正是「数据出不去」的技术保障之一:边界画好了,隐私跟着受保护。

网络公民一问:这个工具会向外部平台发请求吗?会的话,想想别人服务的负载和成本——这也是 Willison 喜欢沙箱的原因之一:沙箱能防你的项目误伤别处。

给当前项目把两问答下来(本页第二个魔法模板):

text
数据隐私检查:这个项目会接触哪些私人数据?数据会离开本机吗——
会发送到哪些地址?网络公民检查:它会对哪些外部服务发请求?
大概什么频率?

你应该看到:两个问题都有具体答案,能写进项目 README。答「不知道」的项目,要么查到知道,要么先别喂私人数据。

  • 小检查:私人数据和外部请求两问,我都能给出具体答案

检查点 ✅ ​

  • 项目里每个密钥都过了「不写死、不进仓库、知道存在哪」三条守则
  • 付费通道分得清订阅 / 按量 / 积分:按量计费的有硬上限,每个通道的用量入口我都知道在哪
  • Claude Code 沙箱已开且两条探针验证过关;用 Codex 的话确认过平台在默认沙箱覆盖内
  • 数据隐私和网络公民两问答完了,答案落进了项目文档
  • 三道防线过完,我重新评过这个项目的风险等级——还配不配「全盘接受」,心里有数

踩坑提醒 ​

❌ API key 贴进代码里「先跑通再说」 ​

现象:key 明文写在代码里,项目随手 push 上仓库,或者截图发群求助时带着 key。原因:AI 生成的代码经常把示例里的占位符直接填成真 key,你不看 diff 就 Accept All——而 CodeRabbit 的量化研究说,AI 参与的代码安全漏洞比人写的多 2.74 倍。正确做法:第 1 步三条守则 + Willison 那句「代码涉及密钥,就必须看懂它怎么工作」;已经暴露过的 key,立刻去发它的后台吊销换新。

❌ 「我用的是订阅,账单不用管」 ​

订阅的套餐用量到顶确实会停。但两个口子要堵上:一是 Claude 订阅开了 usage credits 之后,超出套餐的部分就是按量计费——不设月度消费上限,就回到 Willison 说的「无计费上限」惨案剧本;二是 OpenCode 最常见的玩法是自带模型商 key 按量计费,跟订阅没关系。正确做法:第 2 步那张表先分清扣法,按量的设硬上限,usage credits 开之前先设月度上限。

❌ 以为沙箱「默认开着」,或者「开了就万无一失」 ​

两个方向都错。方向一:Claude Code 的沙箱默认是关的,而且官方明说——沙箱起不来(缺依赖、平台不支持)时,默认会无沙箱继续跑命令;不开、不验证,等于没设这道防线。方向二:沙箱只罩 AI 跑的 shell 命令,Claude 的文件工具、MCP 服务器、hooks 都在沙箱外跑,你自己敲的命令通常也在沙箱外。正确做法:/sandbox 打开 + 探针验证 + 按需设 failIfUnavailable: true;沙箱之外的暴露面,靠权限提示和 验收检查 的清单兜底。

进阶技巧(可选) ​

把凭证文件也挡在沙箱外(Claude Code)。 沙箱默认读权限覆盖 ~/.ssh、~/.aws/credentials 这类凭证文件,而且官方明说「没有内置的凭证拒绝清单——你列什么才拦什么」。在 ~/.claude/settings.json 里加 sandbox.credentials,把凭证文件和 token 环境变量挡在沙箱命令之外(官方示例原样):

json
{
  "sandbox": {
    "enabled": true,
    "credentials": {
      "files": [
        { "path": "~/.aws/credentials", "mode": "deny" },
        { "path": "~/.ssh", "mode": "deny" }
      ],
      "envVars": [
        { "name": "GITHUB_TOKEN", "mode": "deny" },
        { "name": "NPM_TOKEN", "mode": "deny" }
      ]
    }
  }
}

deny 模式的效果:沙箱内的命令读不到这些文件,列出的环境变量在命令运行前会被清掉。

看懂钱花在哪(Claude Code)。 /usage 不只显示总量:订阅用户还能看到用量按技能、子代理、插件、MCP 服务器的归因占比,以及官方给的建议行(比如「某个文件每次请求占 49k token,修剪它」)。账单看着异常时,先跑它再猜。

团队用户:把用量导进自己的监控系统。 Claude Code 支持用 OpenTelemetry 把每个成员的 token 和成本指标导到你自己的观测系统:设 CLAUDE_CODE_ENABLE_TELEMETRY=1 加 OTEL_* 系列环境变量即可。花钱看得见,才管得住。

WorkBuddy 的天然护栏。 积分按月发放、当月有效不结转,本身就是月度消费天花板;它还有循环执行确认——检测到任务可能循环时,会在工具调用执行前暂停问你,选「终止请求」还能进退费评估。对怕按量计费失控的新手,这是个友好的默认设计。

本课小结 ​

✅ 三道防线你都设过了:密钥(不写死、不进仓库、知道存在哪,涉及就看懂)→ 账单(分清订阅 / 按量 / 积分,按量必设上限,用量入口心里有数)→ 沙箱(Claude Code /sandbox 打开 + 探针验证,Codex 默认模式自带,WorkBuddy 默认权限自带沙箱约束,OpenCode 靠前两道顶上)。

✅ 你明白了 API 密钥安全为什么排第一:密钥泄露一次、损失就没有上限——AI 参与的代码安全漏洞比人写的多 2.74 倍,而 key 明文是你完全能自己堵上的暴露面。

✅ 你记住了两句定调的话:Willison 的「完全新手的安全 vibe coding,从沙箱开始」;以及他见过的惨案——对无计费上限的 API vibe coding,数千美元账单。

关键概念回顾:

概念一句话在哪深入
三道防线密钥、账单、沙箱——不赌 AI 不闯祸,只保证闯了祸也伤不到你本页核心思路
密钥三守则不写死、不进仓库、知道存在哪本页第 1 步
计费上限订阅到顶会停;按量计费不设上限就是裸奔本页第 2 步
沙箱操作系统给 AI 命令划的文件 / 网络边界本页第 3 步
隐私一问不想屏幕共享公开的数据,确认它出不了你的机器本页第 4 步

下一课预告 ​

五条纪律到这儿立完了——规划、提示词、报错、验收、防线,你已经有了一套完整的 vibe coding 工作流。下一站进实战:场景实战:选你的路线——网站、小程序还是浏览器插件。

你会学到:

  • 三条路线怎么挑:网站、微信小程序、浏览器插件各自的门槛和产出
  • 每条路线的第一个项目做什么最合适
  • 五条纪律怎么落进真实项目:从规划到验收再到防线,全程用上
  • 上线环节的规则与花费提前摸底:托管平台免费额度、认证费、上架审核
搞懂AI关于我们怎么写隐私说明

独立的第三方教程,与文中提到的任何产品及其公司没有隶属或合作关系;产品名称和商标归各自所有者。价格和政策以官方页面为准。