vibe-security

vibe-security

熱門

稽核程式碼庫,找出 AI 編碼助手在「vibe-coded」應用程式中常見的安全漏洞。檢查是否暴露 API 金鑰、存取控制失效(Supabase RLS、Firebase 規則)、缺少驗證、過度信任用戶端、不安全的付款流程等。每當使用者詢問安全性、想要程式碼審查、提到「vibe coding」,或當你正在撰寫或審查涉及驗證、付款、資料庫存取、API 金鑰、機密或用戶資料的程式碼時,請使用此技能——即使他們沒有明確提到安全性。當使用者說「這樣安全嗎?」、「檢查我的程式碼」、「稽核這個」、「審查漏洞」或「有人能入侵這個嗎?」時,也請觸發此技能。

904星標
111分支
更新於 2026/3/15
SKILL.md
唯讀
名稱
vibe-security
描述

稽核程式碼庫,找出 AI 編碼助手在「vibe-coded」應用程式中常見的安全漏洞。檢查是否暴露 API 金鑰、存取控制失效(Supabase RLS、Firebase 規則)、缺少驗證、過度信任用戶端、不安全的付款流程等。每當使用者詢問安全性、想要程式碼審查、提到「vibe coding」,或當你正在撰寫或審查涉及驗證、付款、資料庫存取、API 金鑰、機密或用戶資料的程式碼時,請使用此技能——即使他們沒有明確提到安全性。當使用者說「這樣安全嗎?」、「檢查我的程式碼」、「稽核這個」、「審查漏洞」或「有人能入侵這個嗎?」時,也請觸發此技能。

稽核程式碼,找出 AI 程式碼生成常見的安全漏洞。這些問題在「vibe-coded」應用程式中很普遍——這類專案藉由 AI 輔助快速開發,但往往忽略了基本的安全原則。

AI 助手經常在這些模式上出錯,導致真實的資料外洩、API 金鑰被竊取、帳單帳戶被盜刷。此技能的存在就是為了在這些錯誤上線前攔截下來。

核心原則

永遠不要信任用戶端。每個價格、使用者 ID、角色、訂閱狀態、功能旗標和速率限制計數器都必須在伺服器端驗證或強制執行。如果它只存在於瀏覽器、行動應用程式套件或請求主體中,攻擊者就能控制它。

稽核流程

系統性地檢查程式碼庫。對於每個步驟,僅在程式碼庫使用該技術或模式時載入相關的參考檔案。跳過不相關的步驟。

  1. 機密與環境變數 — 掃描是否有硬編碼的 API 金鑰、權杖或憑證。檢查是否透過用戶端環境變數前綴(NEXT_PUBLIC_VITE_EXPO_PUBLIC_)暴露機密。確認 .env 已列入 .gitignore。請參閱 references/secrets-and-env.md

  2. 資料庫存取控制 — 檢查 Supabase RLS 政策、Firebase 安全規則或 Convex 驗證守衛。這是 vibe-coded 應用程式中重大漏洞的頭號來源。請參閱 references/database-security.md

  3. 驗證與授權 — 驗證 JWT 處理、中介軟體驗證、Server Action 保護和 session 管理。請參閱 references/authentication.md

  4. 速率限制與濫用防護 — 確保驗證端點、AI 呼叫和昂貴的操作有速率限制。確認速率限制計數器無法被竄改。請參閱 references/rate-limiting.md

  5. 付款安全 — 檢查是否有用戶端價格竄改、webhook 簽章驗證和訂閱狀態驗證。請參閱 references/payments.md

  6. 行動裝置安全 — 驗證安全儲存權杖、透過後端代理保護 API 金鑰,以及 deep link 驗證。請參閱 references/mobile.md

  7. AI / LLM 整合 — 檢查是否暴露 AI API 金鑰、缺少用量上限、提示注入向量和不安全的輸出渲染。請參閱 references/ai-integration.md

  8. 部署設定 — 驗證生產環境設定、安全標頭、source map 暴露和環境隔離。請參閱 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 驗證、中介軟體、Server Actions 和 session 管理。
  • references/rate-limiting.md — 速率限制策略和濫用防護。
  • references/payments.md — Stripe 安全、webhook 驗證和價格驗證。
  • references/mobile.md — React Native 和 Expo 安全:安全儲存、API 代理、deep links。
  • references/ai-integration.md — LLM API 金鑰保護、用量上限、提示注入和輸出清理。
  • references/deployment.md — 生產環境設定、安全標頭和環境隔離。
  • references/data-access.md — SQL 注入防護、ORM 安全和輸入驗證。