这篇话题介绍关于「不安全插件」的一切知识。你将了解到:
- 什么样的插件会被评定为不安全?
- 安装了不安全插件会有什么危害?
- 我发现了一个不安全的插件,应当如何向官方反馈?
- 我是插件作者,我认为我的插件没有问题,应当如何解除不安全标记?
5 个赞
什么是「不安全插件」?
不安全插件是对特定插件的一种标识。
在插件市场中,此类插件的名称右侧将会显示一个红色的感叹号:
一个插件被标记为不安全,需要满足以下至少一个特征:
-
该插件存在某些具体威胁,包括:
- 安装该插件会导致 Koishi 本体、官方插件和启动器无法正常运行
- 例如:boom,会直接炸掉 Koishi 进程
- 例如:nonebot,部分用户反馈可能以小概率导致 Koishi 无限重启
- 例如:petpet,会导致 Koishi 后续无法顺利完成升级
- 该插件对用户的设备存在已查明的侵害行为,例如在未告知用户的前提下盗取账号信息
-
该插件存在某些潜在威胁,包括:
- 使用了文档中没有说明或已明确废弃的 API
- 此类插件安装后能正常运行,但未来升级 Koishi 后将变得不可用,并可能转化为第 1 类情况
- 这样的插件很多,但并不是每一个插件都会标记为不安全,请参见下一节的说明
- 我们无法判断插件是否存在具体威胁
- 例如:某插件将其代码以混淆的形式发布,并且没有公开源代码
-
如果某个插件的作者希望他们的插件以「不安全」的形式呈现在插件市场中,也可以手动在插件的 package.json 文件中标注并发布
- 我不知道有没有这样的例子,
你们为什么不发一个玩玩呢?
3 个赞
不安全插件是如何被标记的?
插件的不安全与否主要是由 自动化程序进行判定 的,同时官方也会视情况手动标注部分插件作为补充。
自动化程序会尝试安装每一个插件的最新版本,并根据已经熟知的规则进行判断。主要包括:
- 是否安装失败(如果自动化脚本都安装不了,那在用户的网络环境下就更不要想了)
- 是否违反了零占用原则
- 是否依赖了含有潜在威胁的代码
- 是否被作者自己或者官方标记为了不安全
满足以上条件之一的插件将会被标记为不安全。
2 个赞
我发现了一个不安全的插件,应当如何向官方反馈?
一般情况下,官方不会主动标记插件为不安全(即便看到存在潜在威胁的代码也不一定会管)。这是因为,违反了其他规则的插件,只需要修改自身代码就能自动解除不安全标识;而被官方标记为不安全的插件,直到被官方解除标记前都会一直处于不安全状态。我们没有精力持续监控每一个插件的状态,所以若无必要官方绝对不会主动标记插件为不安全。截至我写这段话的时间,Koishi 的插件市场共有 600 个插件,而只有不超过 5 个插件和依赖被手动标记为了不安全,可以看到这个比例小于 1%。
如果你认为某个插件应当被标记为不安全,你可以按照以下的流程进行反馈:
- 确认该插件存在具体威胁(也就是上一节中说明的第一种情况)
- 如果能联系到作者,你应当先于作者就插件中存在的问题进行协商
- 在论坛中私信 @shigma,并说明该插件应当被标记为不安全的理由
4 个赞
我是插件作者,我认为我的插件没有问题,应当如何解除不安全标记?
如果你的插件被标记为了不安全,并且你对此完全没有头绪,有可能是因为你的代码实际上存在威胁但你不知道,也有可能是我们的自动化程序出了 bug。此时你同样可以向官方反馈以解除此标记:
- 你自己应当是插件的作者
- 在论坛中私信 @shigma 询问不安全的原因
- 如果他说不知道,那就等待官方修复自动化程序吧~
3 个赞
安装了不安全插件会有什么危害?
不安全插件会使你的 Koishi 和运行 Koishi 的设备处于风险中,在二楼中已经介绍过了,但我还要再强调一遍:
- 某些插件会导致 Koishi 本体、官方插件和启动器无法正常运行
- 某些插件对用户的设备存在已查明的侵害行为
- 某些插件安装后能正常运行,但未来升级 Koishi 后将变得不可用
对于最后一类插件,你仍然可以正常地安装和使用它们(例如 wechaty)。但无论如何,安装不安全插件的行为本身会导致你进入 308 状态。我们将不安全插件作为进入 308 的条件,正是为了防止更多用户受到不安全插件的影响。
4 个赞
发布此楼后,陆续有几位开发者向我反馈了插件的误报情况。目前所有反馈的插件均已确认是误报,并且已经恢复正常显示。
4 个赞
《自报家门》()
不过,不是有什么办法自己手动添加不安全吗()
2 个赞
CyanC
14
koishi字段加一个"insecure": true
2 个赞
shigma
15
20230728 更新:由于收到了一些反馈,在经过 Koishi 团队讨论后,决定将 puppeteer 标记为了不安全依赖,依赖此包的插件会被标记为不安全插件。
特别注意:此次更新只针对 puppeteer (包),koishi-plugin-puppeteer (插件) 依然可以放心使用。
下面介绍该决策的细节。
起因:用户群中出现了一些反馈,表示某个插件无法成功安装,此现象为普遍现象。经过问题定位,群友发现是 puppeteer 依赖导致了这一问题。
问题分析:
- puppeteer 插件会从网络下载完整的 chromium,这个文件体积过大,绝大多数普通用户的网络环境无法在规定时限内完成下载,导致插件安装失败。
- Koishi 的绝大多数用户的设备上均已存在 Chromium,因此下载上述文件是无意义的行为,并且会给设备增加上百 MB 的硬盘占用:
- Koishi Desktop 的安装过程会确保用户电脑上有 Edge(Chromium 内核)
- Koishi Android 自带 Chromium
- Koishi Docker 自带 Chromium
- 使用 puppeteer-core 或 koishi-plugin-puppeteer 不会下载巨大的文件,也不会出现安装失败问题。
对受到影响的插件的建议:
- 建议将依赖更换为 puppeteer-core 或基于 koishi-plugin-puppeteer 服务
- 对于不自带 Chromium 的环境,可以手动下载;想要自动化的话可以开发 koishi-plugin-chromium 插件(同样可能被标记为不安全,但不会影响普通用户)
7 个赞