k2345-security 寄术一览

k2345-security 寄术一览

本帖会不定时发布 k2345-security 的《安全》寄术

k2s GitHub GitHub - CyanChanges/k2345-security: k2345 安全 - Koishi 2345 Security: 保护您的 Koishi 不受侵害(确信)

1 个赞

注入 Context(prototype)

作为一个合格的 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 的软件)

1 个赞

防止插件取消注册

作为一个合格的安全软件,我们要保护自己被恶意插件卸载,导致功能失效,所以我们只需要联合 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)
  }
1 个赞

防止机器人被风控影响

只要你消息不是被风控拦截的,就没有影响!

简单的实现 (利用 k2s)

 ctx.on('message', (session: Session) => {
      ctx.k2s.cls.hookAsync(session, 'send', {
        beforeHook: async () => {
        return
        }
      }
})
1 个赞