用途:对 Convex 后端做约十分钟的安全快速检查,捕捉最常见的上线错误。核心规则是:每个导出的 query、mutation、action 都是任何人都能用任意参数调用的公开端点,因此每个都必须校验身份与归属,或明确设计为匿名。该技能只发现问题,不绘制整个系统,全面审计需交给 convex-security-audit。
主要能力(检查清单,命令在项目根目录运行,grep 均排除 _generated):
- 公开与内部:用 rg 查找导出的 query/mutation/action 及后端内 api.* 调用,判断是否应改为 internalQuery、internalMutation、internalAction。
- 鉴权:查找含公开函数但无 getUserIdentity、getCurrentUser、authedQuery、authedMutation 的文件;角色应来自 users 表而非客户端参数。
- 校验:查找无 args 的函数定义与 v.any();要求 args 与 returns 校验器,返回校验器显式列出字段以防 passwordHash、stripeCustomerId 等泄漏。
- 归属与 ID:v.id("tasks") 只证明 ID 合法,不证明调用者拥有该文档;检查 ctx.db.get/patch/delete/replace(args.*) 后是否有归属校验,调用者身份应来自 ctx.auth 而非参数。
- 密钥:查找 sk_live、sk_test、whsec_、AKIA、-----BEGIN、api_key 等字面量,以及 src 中读取 process.env 的代码。
- HTTP 与存储:检查 http.ts 路由是否校验调用者、是否调用 internal.*,generateUploadUrl 是否要求鉴权,getUrl 是否只用于调用者拥有的文档。
使用方式:在合并涉及 convex/ 的 PR 前、新增或重命名公开函数后、用户要求“快速安全检查”时,或开发到生产推送前无时间做完整审计时使用。逐条运行 grep,阅读结果并修复或记录。
限制:该技能不做完整系统映射,不产出书面报告;当步骤 2 或 4 发现超过两三个问题、应用有多租户数据、http.ts 含 webhook 或返回用户数据的路由、存在文件上传与提供、或用户要求报告/发布评审/事后复盘时,应改用 convex-security-audit。文档见 https://docs.convex.dev/llms.txt 等链接。