vibe-security

vibe-security

热门

审计代码库中 AI 编码助手在“氛围编码”应用中引入的常见安全漏洞。检查暴露的 API 密钥、失效的访问控制(Supabase RLS、Firebase 规则)、缺失的身份验证验证、客户端信任问题、不安全的支付流程等。当用户询问安全问题、想要代码审查、提到“氛围编码”,或者当您编写或审查涉及身份验证、支付、数据库访问、API 密钥、机密或用户数据的代码时,请使用此技能——即使他们未明确提及安全。当用户说“这安全吗?”、“检查我的代码”、“审计这个”、“审查漏洞”或“有人能黑这个吗?”时,也触发此技能。

904Star
111Fork
更新于 2026/3/15
SKILL.md
readonly只读
name
vibe-security
description

审计代码库中 AI 编码助手在“氛围编码”应用中引入的常见安全漏洞。检查暴露的 API 密钥、失效的访问控制(Supabase RLS、Firebase 规则)、缺失的身份验证验证、客户端信任问题、不安全的支付流程等。当用户询问安全问题、想要代码审查、提到“氛围编码”,或者当您编写或审查涉及身份验证、支付、数据库访问、API 密钥、机密或用户数据的代码时,请使用此技能——即使他们未明确提及安全。当用户说“这安全吗?”、“检查我的代码”、“审计这个”、“审查漏洞”或“有人能黑这个吗?”时,也触发此技能。

审计代码中由 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 处理、中间件身份验证、服务器操作保护和会话管理。参见 references/authentication.md

  4. 速率限制与滥用防护 — 确保身份验证端点、AI 调用和昂贵操作具有速率限制。验证速率限制计数器不能被篡改。参见 references/rate-limiting.md

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

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

  7. AI / LLM 集成 — 检查暴露的 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 密钥绕过所有行级安全。任何人都可以从浏览器捆绑包中提取它,并读取、修改或删除数据库中的每一行。

// 修复前
const supabase = createClient(url, process.env.NEXT_PUBLIC_SUPABASE_SERVICE_KEY!)

// 修复后 — 在客户端使用 anon 密钥;service_role 仅存在于服务器端代码中
const supabase = createClient(url, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!)

app/api/checkout/route.ts:15 — 价格取自客户端请求体

攻击者可以通过修改请求来设置任意价格(包括 0.01 美元)。价格必须在服务器端查找。

// 修复前
const session = await stripe.checkout.sessions.create({
  line_items: [{ price_data: { unit_amount: req.body.price } }]
})

// 修复后 — 在服务器端查找价格
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 安全规则和 Convex 身份验证模式。
  • references/authentication.md — JWT 验证、中间件、服务器操作和会话管理。
  • references/rate-limiting.md — 速率限制策略和滥用防护。
  • references/payments.md — Stripe 安全、webhook 验证和价格验证。
  • references/mobile.md — React Native 和 Expo 安全:安全存储、API 代理、深度链接。
  • references/ai-integration.md — LLM API 密钥保护、使用上限、提示注入和输出清理。
  • references/deployment.md — 生产配置、安全头和环境分离。
  • references/data-access.md — SQL 注入防护、ORM 安全和输入验证。