关于 vibe-security
vibe-security 是审查 AI 快速生成应用安全问题的 Skill,面向开发与安全审查场景。它按技术栈检查密钥、访问控制、身份验证、支付及输入处理等风险,并按严重程度给出影响与修复示例。
主要功能
- 01检查密钥与环境变量暴露
- 02审查数据库访问控制和身份验证
- 03检查限流、支付与移动端安全
- 04审查 AI 集成和部署配置
- 05按严重程度提供修复建议
适用场景
- 01发布前审计 AI 辅助开发的应用
- 02检查数据库规则和身份验证实现
- 03排查支付、密钥或输入验证风险
- 04编写涉及用户数据的代码前参考安全要求
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ raroque/ vibe-security-skill --skill vibe-security安装后在 Claude Code 中输入/vibe-security确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/ai-integration.mdauthentication.mddata-access.mddatabase-security.mddeployment.mdmobile.mdpayments.mdrate-limiting.mdsecrets-and-env.md详细介绍
审计代码中 AI 生成代码常引入的安全漏洞。这些问题在“氛围编程”应用中十分常见——这类项目借助 AI 快速构建,却忽视了安全基础。
AI 助手总是会把这些模式处理错,导致真实的数据泄露、API 密钥被盗和账单账户被刷爆。这项技能旨在趁问题尚未上线时发现这些错误。
核心原则
永远不要信任客户端。每个价格、用户 ID、角色、订阅状态、功能标志和速率限制计数器,都必须在服务器端验证或强制执行。如果某项数据只存在于浏览器、移动端应用包或请求正文中,攻击者就能控制它。
审计流程
系统地检查代码库。每一步仅在代码库使用相关技术或模式时加载相应的参考文件。不相关的步骤可以跳过。
-
密钥与环境变量 — 扫描硬编码的 API 密钥、令牌或凭据。检查是否有通过客户端环境变量前缀(
NEXT_PUBLIC_、VITE_、EXPO_PUBLIC_)暴露的密钥。确认.env已加入.gitignore。参见references/secrets-and-env.md。 -
数据库访问控制 — 检查 Supabase RLS 策略、Firebase 安全规则或 Convex 身份验证防护。这是氛围编程应用中最常见的严重漏洞来源。参见
references/database-security.md。 -
身份验证与授权 — 验证 JWT 处理、中间件身份验证、Server Action 保护和会话管理。参见
references/authentication.md。 -
速率限制与滥用防护 — 确保身份验证端点、AI 调用和高成本操作都有速率限制。验证速率限制计数器无法被篡改。参见
references/rate-limiting.md。 -
支付安全 — 检查客户端价格篡改、Webhook 签名验证和订阅状态验证。参见
references/payments.md。 -
移动端安全 — 验证令牌是否安全存储、API 密钥是否通过后端代理得到保护,以及深层链接是否经过验证。参见
references/mobile.md。 -
AI / 大模型集成 — 检查是否暴露 AI API 密钥、缺少用量上限、存在提示词注入入口,或未安全呈现输出。参见
references/ai-integration.md。 -
部署配置 — 验证生产环境设置、安全标头、源映射暴露情况和环境隔离。参见
references/deployment.md。 -
数据访问与输入验证 — 检查 SQL 注入、ORM 误用和缺失的输入验证。参见
references/data-access.md。
如果只进行部分审查,或只针对特定领域生成代码,只加载相关参考文件。
核心指示
- 仅报告真实的安全问题。不要挑剔代码风格或非安全问题。
- 存在多个问题时,按可利用性和实际影响排序。
- 如果代码库未使用某项技术(例如,没有使用 Supabase),则完全跳过该部分。
- 生成新代码时,应主动查阅相关参考文件,避免一开始就引入漏洞。
- 如果发现严重问题(密钥暴露、RLS 已禁用、身份验证绕过),立即在回复顶部指出——不要把它埋在长长的列表中。
输出格式
按严重程度组织发现:严重 → 高 → 中 → 低。
对于每个问题:
- 指明文件和相关行号。
- 命名漏洞。
- 说明攻击者可以做什么(具体影响,而非抽象风险)。
- 展示修复前后的代码。
跳过没有问题的领域。在结尾给出按优先级排列的摘要。
输出示例
严重
lib/supabase.ts:3 — Supabase service_role 密钥暴露在客户端应用包中
service_role 密钥可以绕过所有行级安全策略。任何人都能从浏览器应用包中提取它,并读取、修改或删除数据库中的所有行。
// Before
const supabase = createClient(url, process.env.NEXT_PUBLIC_SUPABASE_SERVICE_KEY!)
// After — use the anon key client-side; service_role belongs only in server-side code
const supabase = createClient(url, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!)
高危
app/api/checkout/route.ts:15 — 价格由客户端请求正文指定
攻击者可以通过修改请求设置任意价格(包括 $0.01)。价格必须在服务器端查询。
// Before
const session = await stripe.checkout.sessions.create({
line_items: [{ price_data: { unit_amount: req.body.price } }]
})
// After — look up the price server-side
const product = await db.products.findUnique({ where: { id: req.body.productId } })
const session = await stripe.checkout.sessions.create({
line_items: [{ price: product.stripePriceId }]
})
总结
- 服务角色密钥泄露(严重): 任何人都可以绕过所有数据库安全措施。请立即轮换密钥,并将其仅移至服务器端。
- 价格由客户端控制(高危): 攻击者可以按任意价格购买。请在服务器端查询价格。
生成代码时
这些规则也应主动遵循。在编写涉及身份验证、支付、数据库访问、API 密钥或用户数据的代码之前,请查阅相关参考文件,以免一开始就引入漏洞。预防胜于检测。
参考资料
references/secrets-and-env.md— API 密钥、令牌、环境变量配置和.gitignore规则。references/database-security.md— Supabase RLS、Firebase Security Rules 和 Convex 身份验证模式。references/authentication.md— JWT 验证、中间件、Server Actions 和会话管理。references/rate-limiting.md— 速率限制策略和滥用防范。references/payments.md— Stripe 安全、Webhook 验证和价格校验。references/mobile.md— React Native 和 Expo 安全:安全存储、API 代理、深度链接。references/ai-integration.md— 大模型 API 密钥保护、使用上限、提示注入和输出清理。references/deployment.md— 生产环境配置、安全标头和环境隔离。references/data-access.md— SQL 注入防护、ORM 安全性和输入校验。