k2345-security 寄术一览
本帖会不定时发布 k2345-security 的《安全》寄术
k2s GitHub GitHub - CyanChanges/k2345-security: k2345 安全 - Koishi 2345 Security: 保护您的 Koishi 不受侵害(确信)
本帖会不定时发布 k2345-security 的《安全》寄术
k2s GitHub GitHub - CyanChanges/k2345-security: k2345 安全 - Koishi 2345 Security: 保护您的 Koishi 不受侵害(确信)
作为一个合格的 2345 安全软件,我们当然要在您的 Koishi OS(x
中加入一些 “middleware” 来处理并防护危险操作
一个简单的示例,hook ctx.emit
Context from ‘koishi’ or ‘cordis’
const Context_emit = Context.prototype.emit
Context.prototype.emit = function notAModifiedFunction(...args) {
// 安全型检测
if (unsafe) throw Error("You are not able to emit it") // throw 异常,或者直接返回
return Context_emit.apply(this, args) // 调用原函数
}
(适用于基于 cordis 的软件)
作为一个合格的安全软件,我们要保护自己被恶意插件卸载,导致功能失效,所以我们只需要联合 registry…
一个简单的防护
const deleter = ctx.registry.delete
ctx.registry.delete = function normalDeleteFuncWithoutk2sHook (plugin) {
ctx.logger('app').error("拒绝访问。无法移除 k2345-security")
if (plugin === ctx.runtime.plugin) {
return false // be not able to delete it !!!!!
}
Context_plugin.call(ctx.root, ctx.runtime.plugin)
return deleter.call(this, plugin)
}