
vibe-security
热门审计代码库中 AI 编码助手在“氛围编码”应用中引入的常见安全漏洞。检查暴露的 API 密钥、失效的访问控制(Supabase RLS、Firebase 规则)、缺失的身份验证验证、客户端信任问题、不安全的支付流程等。当用户询问安全问题、想要代码审查、提到“氛围编码”,或者当您编写或审查涉及身份验证、支付、数据库访问、API 密钥、机密或用户数据的代码时,请使用此技能——即使他们未明确提及安全。当用户说“这安全吗?”、“检查我的代码”、“审计这个”、“审查漏洞”或“有人能黑这个吗?”时,也触发此技能。
审计代码库中 AI 编码助手在“氛围编码”应用中引入的常见安全漏洞。检查暴露的 API 密钥、失效的访问控制(Supabase RLS、Firebase 规则)、缺失的身份验证验证、客户端信任问题、不安全的支付流程等。当用户询问安全问题、想要代码审查、提到“氛围编码”,或者当您编写或审查涉及身份验证、支付、数据库访问、API 密钥、机密或用户数据的代码时,请使用此技能——即使他们未明确提及安全。当用户说“这安全吗?”、“检查我的代码”、“审计这个”、“审查漏洞”或“有人能黑这个吗?”时,也触发此技能。
审计代码中由 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 处理、中间件身份验证、服务器操作保护和会话管理。参见
references/authentication.md。 -
速率限制与滥用防护 — 确保身份验证端点、AI 调用和昂贵操作具有速率限制。验证速率限制计数器不能被篡改。参见
references/rate-limiting.md。 -
支付安全 — 检查客户端价格操纵、webhook 签名验证和订阅状态验证。参见
references/payments.md。 -
移动安全 — 验证安全的令牌存储、通过后端代理的 API 密钥保护以及深度链接验证。参见
references/mobile.md。 -
AI / LLM 集成 — 检查暴露的 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 密钥绕过所有行级安全。任何人都可以从浏览器捆绑包中提取它,并读取、修改或删除数据库中的每一行。
// 修复前
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 }]
})
摘要
- 服务角色密钥暴露(严重): 任何人都可以绕过所有数据库安全。立即轮换密钥并将其仅移至服务器端。
- 客户端控制定价(高): 攻击者可以以任意价格购买。使用服务器端价格查找。
生成代码时
这些规则也适用于主动预防。在编写涉及身份验证、支付、数据库访问、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 安全和输入验证。





