9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-24 01:19:25 +00:00

Remove OP lock (#486)

Current implementation of OP lock is not an appropriate solution to prevent plugins that contain backdoor or malicious code. There are many ways to bypass this check to manipulate the OP list or permissions. The best way to prevent this kind of grief is to get plugins from valid and trustworthy places.
This commit is contained in:
Dreeam
2025-08-31 23:53:19 -04:00
committed by GitHub
parent b75efe6b13
commit d36ed6c316
37 changed files with 1 additions and 116 deletions

View File

@@ -1,30 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Taiyou06 <kaandindar21@gmail.com>
Date: Tue, 22 Jul 2025 22:31:58 +0200
Subject: [PATCH] Op lock
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index f0bdc2bbf358d4c5f113b395c6409ff9fa759e2f..203160ddf928b86d12a25c94550bf13b86598e03 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -1202,6 +1202,9 @@ public abstract class PlayerList {
}
public void op(GameProfile profile) {
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
+ return;
+ }
this.ops.add(new ServerOpListEntry(profile, this.server.getOperatorUserPermissionLevel(), this.ops.canBypassPlayerLimit(profile)));
ServerPlayer player = this.getPlayer(profile.getId());
if (player != null) {
@@ -1210,6 +1213,9 @@ public abstract class PlayerList {
}
public void deop(GameProfile profile) {
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
+ return;
+ }
this.ops.remove(profile);
ServerPlayer player = this.getPlayer(profile.getId());
if (player != null) {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] optimize tickEffects
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 8baa17d2eadfa83b1fcb36fcd1408e917b883989..0d28c1b11dacd6487185d9f8a5a042afa3a9863b 100644
index 8baa17d2eadfa83b1fcb36fcd1408e917b883989..1799cdc0b6c1e585e7e1eeab3828ea0252ae2097 100644
--- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java
@@ -950,6 +950,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin

View File

@@ -1,58 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Taiyou06 <kaandindar21@gmail.com>
Date: Tue, 22 Jul 2025 22:33:07 +0200
Subject: [PATCH] Op lock
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
index 3b516f57854f6482b3748d0c3a037fdeacfe78ab..b4e393da9d445aa7779868310cabfebff78f64dc 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
@@ -100,10 +100,14 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
@Override
public void setOp(boolean value) {
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
+ Bukkit.getLogger().severe("[Leaf] A plugin tried to change the player op! Dumping stacktrace now.");
+ Thread.dumpStack();
+ return;
+ }
if (value == this.isOp()) {
return;
}
-
if (value) {
this.server.getHandle().op(this.profile);
} else {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
index b02826fc7390eb1fd7c2a1b597a5f1abf156b1c1..736563bd3a462911ec99a8158fc5bd3e4115aa62 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
@@ -306,6 +306,11 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
@Override
public void setOp(boolean value) {
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
+ org.bukkit.Bukkit.getLogger().severe("[Leaf] A plugin tried to change the player op! Dumping stacktrace now.");
+ Thread.dumpStack();
+ return;
+ }
this.op = value;
this.perm.recalculatePermissions();
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index a5c0b4bed976c314cee3947caf1c6db78dcf53ae..1fd4bea31ed92903a3727b1f311dfaa37d5bc684 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -279,6 +279,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa
@Override
public void setOp(boolean value) {
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
+ Bukkit.getLogger().severe("[Leaf] A plugin tried to change the player op! Dumping stacktrace now.");
+ Thread.dumpStack();
+ return;
+ }
if (value == this.isOp()) return;
if (value) {

View File

@@ -1,27 +0,0 @@
package org.dreeam.leaf.config.modules.misc;
import org.dreeam.leaf.config.ConfigModules;
import org.dreeam.leaf.config.EnumConfigCategory;
public class OpLock extends ConfigModules {
public String getBasePath() {
return EnumConfigCategory.MISC.getBaseKeyName() + ".op-system-protection";
}
public static boolean preventOpChanges = false;
@Override
public void onLoaded() {
config.addCommentRegionBased(getBasePath(), """
When enabled, prevents plugins from programmatically changing player operator status.
This helps maintain server security by blocking unauthorized op modifications.
Server administrators can still manually manage ops through console/commands.""",
"""
启用后,防止插件以编程方式更改玩家操作员状态。
这有助于通过阻止未经授权的op修改来维护服务器安全性。
服务器管理员仍可通过控制台/命令手动管理ops。""");
preventOpChanges = config.getBoolean(getBasePath() + ".prevent-op-changes", preventOpChanges);
}
}