跳转到正文
报告库
用途分类 / 其他用途

Extension User Approval Skill 安全审计

作者说它能做什么(原文)

Approval-based user management.

第三方安全检查结论

发现安全风险

已检查文件
2
发现的风险
1
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。未发现风险
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。未发现风险
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。未发现风险
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
中风险

审批功能不会自动保护自定义后端端点

原文依据:5 处
发现了什么

该 mixin 提供审批管理接口,但 `isCallerApproved()` 只用于前端界面控制。每个自定义公开后端函数仍需单独加入服务端审批或授权检查。

为什么需要注意

如果应用只隐藏前端功能而遗漏后端检查,未批准用户仍可能直接调用公开端点并执行本应受保护的操作。

该候选准确指出了集成边界:mixin 会公开审批管理端点,但不会自动为应用自定义的后端端点执行审批检查。迁移文档明确说 `isCallerApproved()` 只用于前端界面控制,并要求保留 canister 端守卫;若开发者仅隐藏前端功能而未在每个自定义公开函数中检查审批或管理员权限,未获批准的调用者仍可能直接调用后端功能。用户应要求作者确认所有敏感自定义端点均有服务端守卫,并通过后端调用测试验证。

SKILL.md:113来自说明文档打开原文件
IMPORTANT: Apply the right authorization and/or approval check to each custom public function.
查看另外 4 个位置
SKILL.md:119来自说明文档打开原文件
# User Approval Flow- Check approval status (`isCallerApproved`)- If not approved, show option to request approval (`requestApproval`)- Block access to main features for non-approved users- Admins have access to all features of the application- Display approval status clearly in the UI
migration/v0.x.y-to-v1.x.y.md:42来自说明文档打开原文件
Custom endpoints that guard on approval status continue to use the top-level `approvalState`:```motokopublic shared ({ caller }) func protectedFeature() : async () {    if (not (UserApproval.isApproved(approvalState, caller) or AccessControl.hasPermission(accessControlState, caller, #admin))) {        Runtime.trap("Unauthorized: Only approved users can perform this action");    };};```Keep these canister-side guards. The mixin-provided `isCallerApproved()` is a public query for frontend UI gating only; it does not enforce approval on custom backend endpoints.
migration/v0.x.y-to-v1.x.y.md:52来自说明文档打开原文件
Keep these canister-side guards. The mixin-provided `isCallerApproved()` is a public query for frontend UI gating only; it does not enforce approval on custom backend endpoints.
migration/v0.x.y-to-v1.x.y.md:73来自说明文档打开原文件
- [ ] Remove the four mixin-provided functions from `main.mo` and any custom mixins (keep top-level `UserApproval.initState(...)`)- [ ] Update any custom approval guards to use the top-level `approvalState`. Do not replace them with a frontend `isCallerApproved()` check- [ ] Run `mops install`, `mops build`, and `mops lint`
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

5 个说明模块

该 Skill 通过外部 `MixinUserApproval` 模块公开查询、申请、审批和列表接口;所给材料只展示接口声明,没有该模块的实现,因此无法从本材料独立验证其“仅管理员可审批/列出用户”的实际检查逻辑。

查看原文
SKILL.md:25来自说明文档打开原文件
The prefabricated module `mo:caffeineai-user-approval/approval` provides low-level approval state management. Do not modify it.
SKILL.md:56来自说明文档打开原文件
`include MixinUserApproval(accessControlState, approvalState)` MUST be placed in `main.mo`, not in a custom mixin file. Declare `approvalState` at actor top level and pass it into the mixin. The mixin provides these public endpoints automatically:- `isCallerApproved()`- `requestApproval()`- `setApproval(user, status)`- `listApprovals()`
SKILL.md:142来自说明文档打开原文件
// Get all users and their approval status (admin only)listApprovals(): Promise<Array<UserApprovalInfo>>;// Approve or reject a user (admin only)setApproval(user: Principal, status: ApprovalStatus): Promise<void>;

初始化时,已有管理员会自动成为已批准用户;其他用户处于待审批状态。管理员因此可以访问所有受审批保护的功能。

查看原文
SKILL.md:111来自说明文档打开原文件
On `initState`, existing admins are automatically approved. All other users are pending.
SKILL.md:123来自说明文档打开原文件
- Block access to main features for non-approved users- Admins have access to all features of the application- Display approval status clearly in the UI

升级说明要求把四个手写审批端点删除并改由依赖包的 mixin 提供,同时保留自定义后端端点上的审批检查。

查看原文
migration/v0.x.y-to-v1.x.y.md:18来自说明文档打开原文件
### 2. Replace manual approval endpoints with `MixinUserApproval`Remove all hand-written approval actor endpoints. Keep `approvalState` at actor top level and pass it into the mixin in `main.mo` (not in a custom mixin file):
migration/v0.x.y-to-v1.x.y.md:69来自说明文档打开原文件
- [ ] Bump `caffeineai-user-approval` to `~1.0.0` in `mops.toml`- [ ] Ensure `caffeineai-authorization ~1.0.0` is installed and `include MixinAuthorization(accessControlState, null)` is present in `main.mo`- [ ] Add `let approvalState = UserApproval.initState(accessControlState)` and `include MixinUserApproval(accessControlState, approvalState)` in `main.mo`- [ ] Remove the four mixin-provided functions from `main.mo` and any custom mixins (keep top-level `UserApproval.initState(...)`)- [ ] Update any custom approval guards to use the top-level `approvalState`. Do not replace them with a frontend `isCallerApproved()` check- [ ] Run `mops install`, `mops build`, and `mops lint`- [ ] Regenerate frontend bindings if your workflow requires it
从这里开始 · 工作说明SKILL.md
extension-user-approval
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。
文件与检查记录2 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • migration/v0.x.y-to-v1.x.y.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • migration/v0.x.y-to-v1.x.y.md配套文件

代码和说明中提到的操作

连接外部网站
SKILL.md:13来自说明文档打开原文件
# User ApprovalUser approval extension for [Caffeine AI](https://caffeine.ai?utm_source=caffeine-skill&utm_medium=referral).
读取了多少行
229
文件校验值(用于核对版本)
fe8bb0ad7392cbf568f9e72c76f1316511f832cdc5dbb625da2bffb10c027706