mcpField
V
vibe-security

vibe-security

github.com/raroque安全1.2k3.6k 次安装32 周前更新
代码仓库

关于 vibe-security

vibe-security 是审查 AI 快速生成应用安全问题的 Skill,面向开发与安全审查场景。它按技术栈检查密钥、访问控制、身份验证、支付及输入处理等风险,并按严重程度给出影响与修复示例。

主要功能

  1. 01检查密钥与环境变量暴露
  2. 02审查数据库访问控制和身份验证
  3. 03检查限流、支付与移动端安全
  4. 04审查 AI 集成和部署配置
  5. 05按严重程度提供修复建议

适用场景

  1. 01发布前审计 AI 辅助开发的应用
  2. 02检查数据库规则和身份验证实现
  3. 03排查支付、密钥或输入验证风险
  4. 04编写涉及用户数据的代码前参考安全要求

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/raroque/vibe-security-skill --skill vibe-security

安装后在 Claude Code 中输入/vibe-security确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
ai-integration.md
authentication.md
data-access.md
database-security.md
deployment.md
mobile.md
payments.md
rate-limiting.md
secrets-and-env.md

详细介绍

审计代码中 AI 生成代码常引入的安全漏洞。这些问题在“氛围编程”应用中十分常见——这类项目借助 AI 快速构建,却忽视了安全基础。

AI 助手总是会把这些模式处理错,导致真实的数据泄露、API 密钥被盗和账单账户被刷爆。这项技能旨在趁问题尚未上线时发现这些错误。

核心原则

永远不要信任客户端。每个价格、用户 ID、角色、订阅状态、功能标志和速率限制计数器,都必须在服务器端验证或强制执行。如果某项数据只存在于浏览器、移动端应用包或请求正文中,攻击者就能控制它。

审计流程

系统地检查代码库。每一步仅在代码库使用相关技术或模式时加载相应的参考文件。不相关的步骤可以跳过。

  1. 密钥与环境变量 — 扫描硬编码的 API 密钥、令牌或凭据。检查是否有通过客户端环境变量前缀(NEXT_PUBLIC_、VITE_、EXPO_PUBLIC_)暴露的密钥。确认 .env 已加入 .gitignore。参见 references/secrets-and-env.md。

  2. 数据库访问控制 — 检查 Supabase RLS 策略、Firebase 安全规则或 Convex 身份验证防护。这是氛围编程应用中最常见的严重漏洞来源。参见 references/database-security.md。

  3. 身份验证与授权 — 验证 JWT 处理、中间件身份验证、Server Action 保护和会话管理。参见 references/authentication.md。

  4. 速率限制与滥用防护 — 确保身份验证端点、AI 调用和高成本操作都有速率限制。验证速率限制计数器无法被篡改。参见 references/rate-limiting.md。

  5. 支付安全 — 检查客户端价格篡改、Webhook 签名验证和订阅状态验证。参见 references/payments.md。

  6. 移动端安全 — 验证令牌是否安全存储、API 密钥是否通过后端代理得到保护,以及深层链接是否经过验证。参见 references/mobile.md。

  7. AI / 大模型集成 — 检查是否暴露 AI API 密钥、缺少用量上限、存在提示词注入入口,或未安全呈现输出。参见 references/ai-integration.md。

  8. 部署配置 — 验证生产环境设置、安全标头、源映射暴露情况和环境隔离。参见 references/deployment.md。

  9. 数据访问与输入验证 — 检查 SQL 注入、ORM 误用和缺失的输入验证。参见 references/data-access.md。

如果只进行部分审查,或只针对特定领域生成代码,只加载相关参考文件。

核心指示

  • 仅报告真实的安全问题。不要挑剔代码风格或非安全问题。
  • 存在多个问题时,按可利用性和实际影响排序。
  • 如果代码库未使用某项技术(例如,没有使用 Supabase),则完全跳过该部分。
  • 生成新代码时,应主动查阅相关参考文件,避免一开始就引入漏洞。
  • 如果发现严重问题(密钥暴露、RLS 已禁用、身份验证绕过),立即在回复顶部指出——不要把它埋在长长的列表中。

输出格式

按严重程度组织发现:严重 → 高 → 中 → 低。

对于每个问题:

  1. 指明文件和相关行号。
  2. 命名漏洞。
  3. 说明攻击者可以做什么(具体影响,而非抽象风险)。
  4. 展示修复前后的代码。

跳过没有问题的领域。在结尾给出按优先级排列的摘要。

输出示例
严重

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 }]
})
总结
  1. 服务角色密钥泄露(严重): 任何人都可以绕过所有数据库安全措施。请立即轮换密钥,并将其仅移至服务器端。
  2. 价格由客户端控制(高危): 攻击者可以按任意价格购买。请在服务器端查询价格。

生成代码时

这些规则也应主动遵循。在编写涉及身份验证、支付、数据库访问、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 安全性和输入校验。

评论

支持 Markdown