SuperAPI AI 工具集

security-convex

安全与审计

查看项目

更新于 10-15 13:58

技能介绍

用途

该技能用于审查 Convex 应用的安全审计模式,聚焦身份认证(authentication)与授权(authorization)。适用于审计查询/变更的认证、行级安全(row-level security)以及校验器(validators)。

主要能力

技能围绕 Convex 的常见安全缺陷给出正反示例与修复建议,涵盖以下方面:

认证检查

Convex 函数默认公开,每个查询和变更都可被任意客户端调用,除非添加认证检查。技能演示了未认证函数的风险,例如任何人都能读取全部用户或删除任意文档。修复方式是先调用 getAuthUserId(ctx) 并检查是否为空。对于使用第三方认证(Clerk、Auth0)的情况,技能指出仅检查 ctx.auth 存在是错误的,identity 可能为 null,应正确校验 identity 后再使用 identity.subject 过滤数据。

授权与 IDOR 问题

认证(你是谁)不等于授权(你能访问什么)。技能展示了 IDOR 场景:已登录用户可读取任意笔记,因为只做了认证而未做所有权检查。修复方式是获取文档后校验 note.userId 是否等于当前用户,不匹配时抛出“Not found”以避免泄露存在性。对于团队/组织成员,技能指出不能信任客户端传入的 teamId,应先查询 teamMembers 验证成员关系。

自定义函数模式(推荐)

技能推荐使用 convex-helpers 的 customQuery/customMutation 来默认强制认证,使 ctx.user 保证存在,并建议审计时检查是否一致使用自定义函数,搜索原始 query( 和 mutation( 的使用。

输入校验

技能指出缺少校验器时 args 为 any,可能插入任意内容;应使用严格校验器。同时强调不能信任客户端提供的 userId 用于所有权,userId 应由服务端从认证上下文获取。

内部函数

敏感逻辑不应放在公开变更中,应使用 internalMutation,仅允许其他服务端函数调用;公开函数校验后再通过 ctx.runMutation 调用内部函数。

HTTP 动作

HTTP 端点若无认证存在风险,应验证 webhook 签名,签名不匹配时返回 401。

实时订阅泄露

返回整个集合的订阅可能造成数据泄露,应按用户访问权限过滤,例如先查询用户所属频道再过滤消息。

环境变量

环境变量仅在 actions 中可用,不在查询/变更中可用(为保持确定性)。应通过 npx convex env set 设置,并在 action 中检查是否存在。

使用方式

技能提供严重性汇总表,列出问题、查找位置与严重级别,例如:查询/变更无认证检查为 CRITICAL;IDOR、客户端提供 userId、缺少校验器、公开函数承载内部逻辑、HTTP 动作无认证为 HIGH;订阅数据泄露、未使用自定义函数为 MEDIUM。

技能还提供快速审计命令,使用 rg 搜索公开查询与变更、缺少认证检查的函数、客户端提供的 userId、缺少校验器的函数、HTTP 动作以及内部与公开函数的使用情况。

最后提供加固检查清单,包括:所有查询/变更都有认证检查或使用自定义函数;文档访问包含所有权/成员关系验证;userId 来自认证上下文而非客户端参数;所有函数有适当校验器;敏感操作使用 internalMutation/internalAction;HTTP 动作验证签名/令牌;实时订阅按用户访问过滤;一致使用自定义函数;ESLint 规则阻止导入原始 query/mutation。

适用场景

适用于对 Convex 后端进行安全审计、代码审查或加固,尤其是检查认证、授权、输入校验和 Convex 特有漏洞时。

限制

资料未提供该技能的安装命令、运行方式、平台支持、收费或价格信息,这些内容暂未提供。