boxed-dev/vibe-coding-security
GitHub: boxed-dev/vibe-coding-security
针对 AI 辅助编码应用的上线前安全检查清单,包含 47 项可测试的安全检查和 5 个 Claude Code 自动化审计技能,帮助开发者避免在 AI 生成代码中遗留常见严重漏洞。
Stars: 10 | Forks: 0
# Vibe Coding 安全
在你发推文宣布上线之前——先跑一遍这 47 项检查。这也正是 Lovable RLS CVE(170 个应用,2025 年 3 月)和 Moltbook 泄露(150 万个 API token,2026 年 2 月)背后的相同模式。
2026 年第一季度发布的 Vibe 编码应用中,有 91.5% 至少存在一个严重漏洞。这来自 Escape.tech 对 5,600 个真实应用的审计,并非捏造的数字。每 4 个应用中就有 1 个在客户端 JavaScript 中暴露了 Stripe 或 OpenAI 密钥。这是一份包含 47 个具体、可测试项目的检查清单。每一项都对应一个真实的事件模式。如果你能勾选全部 47 项,那就发布吧。如果不能,请先修复阻碍你的问题。
这不是一个 SaaS。不是一个扫描器。只是你在推送到生产环境之前过一遍的扁平列表。
## 47 项发布前安全检查清单
**你距离发布还有 30 分钟。停下来。先跑一遍这个。**
最近对 5,600 个 AI 生成应用的审计(Escape.tech,2026 年第一季度)显示,**91.5% 包含至少一个严重漏洞**。仅 Lovable RLS 漏洞(CVE-2025-48757,2025 年 3 月)就暴露了 170 多个生产应用。Moltbook 在 2026 年 2 月暴露了 150 万个用户 token。这些不是极端的边缘情况——它们都是主流的上线项目。
这份检查清单将 47 个具体、可测试的项目分为身份验证、密钥、API、数据库、前端和部署几大类。**如果你不能勾选全部 47 项,就不要发布。**
### 身份验证 (8 项)
- [ ] **1.** 数据库中的每个表都启用了 Database Row-Level Security (RLS)。
- [ ] **2.** 每个表和每个角色(anon、authenticated、service_role)都有相应的 RLS 策略。
- [ ] **3.** 在每个受保护的 API 路由上,JWT token 都在服务端进行了验证(绝不信任前端来验证身份)。
- [ ] **4.** 登录后会话会轮换或失效(CSRF + 会话固定保护)。
- [ ] **5.** 魔法链接(无密码身份验证)是单次使用的,在 15 分钟内过期,并与用户 IP 或设备指纹绑定。
- [ ] **6.** 不能仅基于用户提供的 ID 更新或删除用户、订单或敏感记录。测试:尝试通过更改请求中的 ID 来更新另一个用户的记录。
- [ ] **7.** 在状态更改请求(POST、PUT、DELETE)上通过双重提交 cookie 或 SameSite=Strict 验证 CSRF token。
- [ ] **8.** Session cookies 设置了 HttpOnly、Secure 和 SameSite=Strict 标志。
### 密钥与环境变量 (7 项)
- [ ] **9.** NEXT_PUBLIC_* 变量、Vue/React .env 文件或硬编码字符串中没有密钥。使用 Grep 搜索 `NEXT_PUBLIC_` 并审计所有变量。
- [ ] **10.** .env、.env.local、.env.*.local 包含在 .gitignore 中且从未被提交。检查 git 历史:`git log --all -p | grep -i "api_key\|secret"`。
- [ ] **11.** Supabase service_role key 仅存在于服务端 .env(Node、Python、Go 等)中,绝不在前端 bundles 或 .env.local 中。
- [ ] **12.** Stripe keys:公钥放在 NEXT_PUBLIC_* 中,密钥仅限服务端,并验证 webhook 签名。
- [ ] **13.** OpenAI、Anthropic、xAI API keys 绝不在前端代码中;始终通过你的 API 进行代理。
- [ ] **14.** 源代码(包括注释和未使用的代码)中任何地方都没有硬编码的 API keys、数据库 URL 或凭据。
- [ ] **15.** 密钥在发布后或一旦在源代码历史中暴露过,必须进行轮换。
### API 加固 (10 项)
- [ ] **16.** /api/auth/*、/api/login、/api/register 上启用了速率限制。测试:100 个请求/分钟应返回 429。
- [ ] **17.** 传入 /api/* 的所有用户输入在接触数据库之前都使用 Zod、Yup 或类似工具进行了验证。没有将原始 req.body 直接传递给查询的情况。
- [ ] **18.** 没有批量赋值:用户不能通过 POST 提交来设置 admin=true、role=admin 或其他敏感字段。
- [ ] **19.** Webhook 签名已验证(使用常量时间比较,将 HMAC-SHA256 签名头与预期值进行比较)。
- [ ] **20.** CORS 未设置为 `*`。允许的源是硬编码的,且生产环境中不包含 localhost。
- [ ] **21.** SQL 查询仅使用参数化语句。不将用户输入拼接进 SQL。
- [ ] **22.** NoSQL 查询(MongoDB、Firebase 等)不将用户输入拼接进过滤器或选择器。
- [ ] **23.** 文件上传已验证(mime 类型 + 文件大小),存储在 web 根目录之外,并已重命名以防止路径遍历。
- [ ] **24.** 登录后的重定向已加入白名单。不能通过开放重定向跳转到外部域。
- [ ] **25.** API 不发起未经验证的外部请求。确保服务端请求中使用的 URL 来自你的允许列表,而不是用户输入(SSRF 预防)。
### 数据库 (6 项)
- [ ] **26.** 所有表上都强制执行了 RLS。anon 角色在没有明确策略授权的情况下,不能对任何表执行 SELECT/INSERT/UPDATE/DELETE。
- [ ] **27.** 公共 anon 角色的默认权限为零。策略仅授予所需权限——对公共列表只读,绝不授予写入权限。
- [ ] **28.** Service-role key 仅在服务端代码中使用。验证:`grep -r "service_role" src/` ——前端文件中应返回零结果。
- [ ] **29.** 用户数据隔离:查询始终按 `auth.uid()` 或 `team_id` 过滤。没有查询会返回所有用户的所有记录。
- [ ] **30.** 软删除(is_deleted 标志)或存档表可防止意外数据丢失。硬删除会记录操作者和时间戳。
- [ ] **31.** 数据库备份存在并已经过测试。在本次发布之前,你已验证可以从备份中恢复。
### 前端 (8 项)
- [ ] **32.** 没有 DOMPurify 净化的 dangerouslySetInnerHTML 或 innerHTML。审计代码库中的每一个实例。
- [ ] **33.** 所有 npm/pip/gem 依赖项都已扫描已知的 CVE。在发布前运行 `npm audit`、`pnpm audit` 或 Snyk。
- [ ] **34.** 生产环境中启用了 Content Security Policy (CSP)(strict-dynamic,没有 unsafe-inline)。首先在预发环境中进行测试。
- [ ] **35.** 生产环境中无法访问 /api/debug、/admin/backdoor 或任何内部测试端点。Grep 搜索 "debug"、"mock"、"test-only" 路由。
- [ ] **36.** 设置了 X-Frame-Options: DENY。验证每个响应是否发送了该头(防止点击劫持)。
- [ ] **37.** 生产环境中的错误消息不会泄露内部路径、堆栈跟踪或数据库 schema。测试 404、500 和权限错误。
- [ ] **38.** 没有原型污染:用户提供的对象在没有经过净化的情况下不会合并到应用程序对象中。
- [ ] **39.** React:没有包含未净化用户数据的内联事件处理程序。对于任何呈现为 HTML 的用户内容,请使用 react-dompurify 或等效工具。
### 部署 (8 项)
- [ ] **40.** 部署配置明确区分了环境变量——公共变量(NEXT_PUBLIC_*)与服务端密钥。
- [ ] **41.** 所有生产构建中都设置了 NODE_ENV=production。在部署日志中进行验证。
- [ ] **42.** 应用程序监控(Sentry、LogRocket 等)已启用,并配置为在发送前净化敏感数据。
- [ ] **43.** 错误跟踪不会在错误 payload 中发送用户 session tokens、密码、API keys 或 PII。审计你的 Sentry/LogRocket 配置。
- [ ] **44.** 生产 bundles 中排除了 source maps。使用 --no-sourcemap 构建或在部署前删除 .map 文件。
- [ ] **45.** 强制执行 HTTPS。所有 HTTP 请求重定向到 HTTPS。测试:`curl -i http://yourapp.com`。
- [ ] **46.** 第三方集成(分析、聊天小部件等)仅从可信 CDN 加载并使用 Subresource Integrity (SRI) 哈希。
- [ ] **47.** 你已在生产预发环境中测试了完整的账户恢复流程(密码重置、会话失效、重新认证)。
### 在你点击部署之前
1. 你勾选了全部 47 项。
2. 你手动测试了 3-5 个项目(不仅是代码检查)。
3. 你的网站上有一个安全联系邮箱(security@yourapp.com)。
**如果你不能自信地勾选全部 47 项,请不要发布。从第一天开始积累的安全技术债是很难偿还的。**
## 5 个免费技能
这些技能位于本仓库的 `5-free-skills/` 中。将它们放入 `.claude/skills/` 中,并在 Claude Code 中使用 `/skill ` 运行它们。
| 技能 | 作用 |
|---|---|
| `5-free-skills/audit-supabase-rls.md` | 对你的数据库运行 SQL,并准确告诉你哪些表未受保护 —— CVE-2025-48757 检查 |
| `5-free-skills/find-exposed-env-vars.md` | Grep 搜索你的构建输出,查找被 NEXT_PUBLIC_ 拖入客户端 JS 的密钥 |
| `5-free-skills/audit-prompt-injection-vectors.md` | 查找用户输入在没有边界的情况下到达 LLM 调用的每一个位置 |
| `5-free-skills/audit-rate-limiting.md` | 检查你的 auth 路由是否在 N 次尝试后实际拒绝了请求 |
| `5-free-skills/find-xss-react.md` | 查找 dangerouslySetInnerHTML 和未净化的输出 —— 86% 的 AI 生成代码未能通过此项 |
## 2 个免费案例研究
| 案例研究 | 哪里出了问题 |
|---|---|
| `free-case-studies/cve-2025-48757-lovable-rls.md` | 170 多个 Lovable 应用是如何在 RLS 完全关闭的情况下发布的,其中包括一个拥有 18,697 条学生记录的 EdTech 平台 |
| `free-case-studies/moltbook-supabase-leak.md` | Moltbook 如何在任何人注意到之前泄露了 150 万个 API token 长达 8 个月 |
## 这不是什么
这不是一个 SaaS 扫描器。不是持续监控。没有任何数据会回传到外部。
这些是静态的 markdown 文件。你阅读它们,手动运行 SQL 查询和 shell 命令,然后修复它们发现的问题。没有仪表盘。没有警报。没有魔法。
如果你正在处理健康数据、财务记录或任何受监管的内容,这也不能替代专业的渗透测试。该检查清单涵盖了在 Vibe 编码应用中经常出现的模式。它并没有涵盖所有内容。
## 想要完整的宝库?
这 47 项检查清单是免费的。宝库包含跨越 5 个攻击面的 50 个技能,其中包括 12 个专为 AI 和 LLM 应用设计的技能:Prompt 注入、MCP server 安全、Agent 权限提升、vector DB 隔离、RAG 数据泄露、系统 Prompt 提取。
还包括:15 条 Cursor 规则、5 个 MCP server 配置、4 份检查清单、30 个对抗性审查 Prompt 以及 10 个带有完整根因分析的案例研究(包括 PocketOS 案例,其中 Cursor + Claude Opus 4.6 Agent 因不受限制的 Railway token,在 9 秒内删除了生产数据库和所有备份)。
没有 SaaS。没有订阅。只是存放在你仓库中的 Markdown 文件。
**前 10 名买家 $39,之后 $79。 → [rishabhvaai.gumroad.com/l/plddbd](https://rishabhvaai.gumroad.com/l/plddbd)**
## 主题
`claude-code` `cursor` `lovable` `v0` `security` `mcp` `vibe-coding` `supabase` `next-js` `prompt-injection` `rls` `ai-security`
如果这份检查清单让你避免发布令人尴尬的东西,请给仓库加。然后把这个链接发给你团队中还在不考虑这些问题就直接使用 Lovable 或 v0 的任何人。
标签:AI代码安全, API安全, CISA项目, Cutter, CVE防御, DevSecOps, JSON输出, JWT验证, RLS配置, SaaS安全, StruQ, Vibe Coding, 上游代理, 前端安全, 多线程, 安全检查清单, 密钥泄露, 文档安全, 漏洞修复, 生产部署, 网络安全培训, 行级安全, 防御加固, 预发布安全