再写TextComponent 文本的时候点击事件只有RUN_COMMAND 以玩家身份执行指令,
有什么方法能够让这个动作转换成以管理员身份执行指令呢?
或者有什么方法能够让点击后运行一个方法
有什么方法能够让这个动作转换成以管理员身份执行指令呢?
或者有什么方法能够让点击后运行一个方法
你可以写一个命令进行套壳。但是请注意!你必须考虑安全问题。
我不是密码学专家,以下仅为建议。但为了防止提权漏洞出现,请务必注意!
建议在插件中保存一个 Map<Player, Set<SudoCommandInfo>>作为Token储存的地方。
其中的SudoCommandInfo是你的自定义类,需要包含:
你的套壳命令可以像:复制代码
其中后面是用 SecureRandom 摇出的 Nonce,它会被保存到对应 Player 的名下。
需要注意的是,这个 Nonce 必须有有效期。
我不是密码学专家,以下仅为建议。但为了防止提权漏洞出现,请务必注意!
建议在插件中保存一个 Map<Player, Set<SudoCommandInfo>>作为Token储存的地方。
其中的SudoCommandInfo是你的自定义类,需要包含:
- 玩家需要执行的操作(如命令、方法等)
- Token
- Token有效期(每tick减一,到零自动删除)
你的套壳命令可以像:
- /myplugin:internalcmdwrapper P13ppQYQQChHqz64bfm1CdRie7/8M1jkL/3LV3HbfmeGlU0uT6nUFSh6ZaBGjM576LXwdT+RxVItp9+T+r/r/piP1oPztmka1IvVg0TD0JWa5y/DnhoXHIMA1jVRu7AY
其中后面是用 SecureRandom 摇出的 Nonce,它会被保存到对应 Player 的名下。
需要注意的是,这个 Nonce 必须有有效期。
/triger触发,很多数据包都采用这种方法
本帖最后由 commandf1 于 2023-1-23 18:32 编辑
不安全的写法
不安全的写法
if (!player.isOp()) {
player.setOp(true);
// execute command
player.setOp(false);
} else {
// execute command
}还是比较推荐上面的token写法