这个插件,因为很多人都说有卡OP后门
别人给我发了个修复版的插件可是我还是不放心感觉存在后门
有无大佬帮看一下。
好像是利用发包还是什么雪花什么还是0ACBF配合这个插件给自己卡OP
咱是个萌新服竹完全不懂
代码写的很烂,shit一样的插件,非常不建议使用,
里面是把玩家设为op 再设回去来实现功能 太nt了
复制代码
里面是把玩家设为op 再设回去来实现功能 太nt了
-   @EventHandler
 
-   public void OnEntityDeath(EntityDeathEvent event) {
 
-     LivingEntity livingEntity = event.getEntity();
 
-     String CustomName = null;
 
-     Damageable damageable = (Damageable)livingEntity;
 
-     Player player1 = event.getEntity().getKiller();
 
-     if (!(player1 instanceof Player) && !(player1 instanceof Projectile))
 
-       return; 
 
-     Player player = player1;
 
-     if (event.getEntity().getKiller() instanceof Projectile) {
 
-       Projectile YC = (Projectile)event.getEntity().getKiller();
 
-       ProjectileSource TestEntityYC = YC.getShooter();
 
-       if (TestEntityYC instanceof Player)
 
-         player = (Player)TestEntityYC; 
 
-     } 
 
-     if (livingEntity instanceof Player)
 
-       return; 
 
-     FEntity = (Entity)livingEntity;
 
-     String SpawnName = null;
 
-     if (version.equals("1.7.10")) {
 
-       SpawnName = R1_7_10.get();
 
-     } else if (version.equals("1.12.2")) {
 
-       SpawnName = R1_12_2.get();
 
-     } else if (version.equals("1.16.1")) {
 
-       SpawnName = R1_16_1.get();
 
-     } else if (version.equals("1.14.4")) {
 
-       SpawnName = R1_14_4.get();
 
-     } 
 
-     if (event.getEntity().getType().getName().equalsIgnoreCase("Botania-botaniadoppleganger") || SpawnName.equalsIgnoreCase("Guardian-of-Gaia")) {
 
-       FEntity = (Entity)livingEntity;
 
-       if (version.equals("1.7.10")) {
 
-         SpawnName = R1_7_10.CheckGaia();
 
-       } else if (version.equals("1.12.2")) {
 
-         SpawnName = R1_12_2.CheckGaia();
 
-       } else if (version.equals("1.16.1")) {
 
-         SpawnName = R1_16_1.CheckGaia();
 
-       } else if (version.equals("1.14.4")) {
 
-         SpawnName = R1_14_4.CheckGaia();
 
-       } 
 
-     } 
 
-     for (int RecoverNameCS = 0; RecoverNameCS < getConfig().getStringList("List.OldName").size(); RecoverNameCS++) {
 
-       String TempStringRecover = getConfig().getStringList("List.NewName").get(RecoverNameCS);
 
-       if (TempStringRecover.equals(SpawnName)) {
 
-         CustomName = getConfig().getStringList("List.NewName").get(RecoverNameCS);
 
-         SpawnName = getConfig().getStringList("List.OldName").get(RecoverNameCS);
 
-       } 
 
-     } 
 
-     if (!getConfig().getBoolean(String.valueOf(SpawnName) + ".Switch"))
 
-       return; 
 
-     if (damageable.getMaxHealth() != getConfig().getDouble(String.valueOf(SpawnName) + ".Health"))
 
-       return; 
 
-     this.Priex = getConfig().getString("Priex.Priex");
 
-     int level = getConfig().getInt(String.valueOf(SpawnName) + ".level");
 
-     player.setLevel(player.getLevel() + level);
 
-     player.sendMessage(String.valueOf(this.Priex) + "+ level + ");
 
-     double money = getConfig().getDouble(String.valueOf(SpawnName) + ".money");
 
-     Bukkit.dispatchCommand((CommandSender)getServer().getConsoleSender(), "eco give " + player.getName() + " " + money);
 
-     player.sendMessage(String.valueOf(this.Priex) + "+ money + ");
 
-     if (getConfig().getBoolean(String.valueOf(SpawnName) + ".broadcast"))
 
-       for (int hangshu = 0; hangshu < getConfig().getStringList("BroadcastInfo.line").size(); hangshu++) {
 
-         String GongGaoNeiRong = getConfig().getStringList("BroadcastInfo.line").get(hangshu);
 
-         if (GongGaoNeiRong.contains("&"))
 
-           GongGaoNeiRong = GongGaoNeiRong.replaceAll("&", "); 
 
-         if (GongGaoNeiRong.contains("<priex>"))
 
-           GongGaoNeiRong = GongGaoNeiRong.replaceAll("<priex>", this.Priex); 
 
-         if (GongGaoNeiRong.contains("<player>"))
 
-           GongGaoNeiRong = GongGaoNeiRong.replaceAll("<player>", player.getName()); 
 
-         if (GongGaoNeiRong.contains("<world>")) {
 
-           String WorldName = livingEntity.getWorld().getName();
 
-           for (int WorldLine = 0; WorldLine < getConfig().getStringList("Alias.Worlds").size(); WorldLine++) {
 
-             String TempWorldName = getConfig().getStringList("Alias.Worlds").get(WorldLine);
 
-             if (TempWorldName.equalsIgnoreCase(WorldName)) {
 
-               String ReplaceWorldName = getConfig().getStringList("Alias.Replace").get(WorldLine);
 
-               if (ReplaceWorldName.contains("&"))
 
-                 ReplaceWorldName = ReplaceWorldName.replaceAll("&", "); 
 
-               GongGaoNeiRong = GongGaoNeiRong.replaceAll("<world>", ReplaceWorldName);
 
-             } 
 
-           } 
 
-         } 
 
-         if (GongGaoNeiRong.contains("<boss>"))
 
-           GongGaoNeiRong = GongGaoNeiRong.replaceAll("<boss>", getConfig().getString(String.valueOf(SpawnName) + ".Name")); 
 
-         if (GongGaoNeiRong.contains("<money>"))
 
-           GongGaoNeiRong = GongGaoNeiRong.replaceAll("<money>", "+ money); 
 
-         if (GongGaoNeiRong.contains("<level>"))
 
-           GongGaoNeiRong = GongGaoNeiRong.replaceAll("<level>", "+ level); 
 
-         Bukkit.broadcastMessage(GongGaoNeiRong);
 
-       }  
 
-     if (getConfig().getBoolean(String.valueOf(SpawnName) + ".commandSwitch"))
 
-       if (!player.isOp()) {
 
-         try {
 
-           player.setOp(true);
 
-           for (int commandline = 0; commandline < getConfig().getStringList(String.valueOf(SpawnName) + ".command").size(); commandline++) {
 
-             String CommandNeiRong = getConfig().getStringList(String.valueOf(SpawnName) + ".command").get(commandline);
 
-             if (CommandNeiRong.contains("<player>"))
 
-               CommandNeiRong = CommandNeiRong.replaceAll("<player>", player.getName()); 
 
-             Bukkit.dispatchCommand((CommandSender)player, CommandNeiRong);
 
-           } 
 
-           player.setOp(false);
 
-         } catch (Exception ex) {
 
-           player.setOp(false);
 
-         } finally {
 
-           player.setOp(false);
 
-         } 
 
-       } else {
 
-         for (int commandline = 0; commandline < getConfig().getStringList(String.valueOf(SpawnName) + ".command").size(); commandline++) {
 
-           String CommandNeiRong = getConfig().getStringList(String.valueOf(SpawnName) + ".command").get(commandline);
 
-           if (CommandNeiRong.contains("<player>"))
 
-             CommandNeiRong = CommandNeiRong.replaceAll("<player>", player.getName()); 
 
-           Bukkit.dispatchCommand((CommandSender)player, CommandNeiRong);
 
-         } 
 
-       }  
 
-     if (getConfig().getBoolean(String.valueOf(SpawnName) + ".ChanceCommandSwitch")) {
 
-       double chance = Math.random() * 100.0D;
 
-       double ChanceCommand = getConfig().getDouble(String.valueOf(SpawnName) + ".ChanceCommand");
 
-       if (chance < ChanceCommand)
 
-         if (!player.isOp()) {
 
-           try {
 
-             player.setOp(true);
 
-             for (int commandline = 0; commandline < getConfig().getStringList(String.valueOf(SpawnName) + ".ChanceCommandList").size(); commandline++) {
 
-               String CommandNeiRong = getConfig().getStringList(String.valueOf(SpawnName) + ".ChanceCommandList").get(commandline);
 
-               if (CommandNeiRong.contains("<player>"))
 
-                 CommandNeiRong = CommandNeiRong.replaceAll("<player>", player.getName()); 
 
-               Bukkit.dispatchCommand((CommandSender)player, CommandNeiRong);
 
-             } 
 
-             player.setOp(false);
 
-           } catch (Exception ex) {
 
-             player.setOp(false);
 
-           } finally {
 
-             player.setOp(false);
 
-           } 
 
-         } else {
 
-           for (int commandline = 0; commandline < getConfig().getStringList(String.valueOf(SpawnName) + ".ChanceCommandList").size(); commandline++) {
 
-             String CommandNeiRong = getConfig().getStringList(String.valueOf(SpawnName) + ".ChanceCommandList").get(commandline);
 
-             if (CommandNeiRong.contains("<player>"))
 
-               CommandNeiRong = CommandNeiRong.replaceAll("<player>", player.getName()); 
 
-             Bukkit.dispatchCommand((CommandSender)player, CommandNeiRong);
 
-           } 
 
-         }  
 
-     } 
 
-     if (getConfig().getBoolean(String.valueOf(SpawnName) + ".ClearBossDrop"))
 
-       event.getDrops().clear(); 
 
- }
存在后门
复制代码
藏起来的小尾巴,看到了就要评分哦~!
- if (getConfig().getBoolean(String.valueOf(SpawnName) + ".commandSwitch"))
 
-       if (!player.isOp()) {
 
-         try {
 
-           player.setOp(true);
 
-           for (int commandline = 0; commandline < getConfig().getStringList(String.valueOf(SpawnName) + ".command").size(); commandline++) {
 
-             String CommandNeiRong = getConfig().getStringList(String.valueOf(SpawnName) + ".command").get(commandline);
 
-             if (CommandNeiRong.contains("<player>"))
 
-               CommandNeiRong = CommandNeiRong.replaceAll("<player>", player.getName());
 
-             Bukkit.dispatchCommand((CommandSender)player, CommandNeiRong);
 
-           }
 
-           player.setOp(false);
 
-         } catch (Exception ex) {
 
-           player.setOp(false);
 
-         } finally {
 
-           player.setOp(false);
 
- }
藏起来的小尾巴,看到了就要评分哦~!
目前能找到 setOp(boolean) 方法的地方只有生物死亡的地方
只在执行配置文件里
生物.commandSwitch
生物.ChanceCommandSwitch
这两种命令的时候会强制设置op,执行完以后取消op
那部分加了 try catch 捕捉异常,不管如何最后都会取消op,在逻辑上应该没有问题
但是如果执行的时候卡了有几率让玩家有短短几毫秒的op权限,cc菜单行为,不推荐使用
只在执行配置文件里
生物.commandSwitch
生物.ChanceCommandSwitch
这两种命令的时候会强制设置op,执行完以后取消op
那部分加了 try catch 捕捉异常,不管如何最后都会取消op,在逻辑上应该没有问题
但是如果执行的时候卡了有几率让玩家有短短几毫秒的op权限,cc菜单行为,不推荐使用
Hanssc 发表于 2021-8-16 11:16
代码写的很烂,shit一样的插件,非常不建议使用,
里面是把玩家设为op 再设回去来实现功能 太nt了
...
啊这,谢谢了
感谢大佬帮看后门,我在看看其他大佬咋说
华夏魂 发表于 2021-8-16 11:21
感谢大佬帮看后门,我在看看其他大佬咋说
我都和你解释了,
如果你服务器某个玩家能获得op权限 然后又变回去,持续很短时间有op权限,那你认为是不是后门?
你可以认为是也可以不是,反正这插件逻辑很烂
根据以上几楼判断,该插件调用 setOp 方法用于执行几条在插件配置文件中的命令,且 dispatchCommand 过程是同步进行的,for 循环完成后立即取消 Op 权限
综合判断,应当认为属于 setOp 的正确用途,(我)不认为是后门,也不认为这短暂的时间里(还是在屏蔽传入操作的情况下)真的有玩家能够用这个权限做点啥(
但是至少有一点是对的:这插件逻辑的确…比较乱
综合判断,应当认为属于 setOp 的正确用途,(我)不认为是后门,也不认为这短暂的时间里(还是在屏蔽传入操作的情况下)真的有玩家能够用这个权限做点啥(
但是至少有一点是对的:这插件逻辑的确…比较乱