From db6af31395c59e079945df7aa0bf96c471dfc5bc Mon Sep 17 00:00:00 2001 From: skbeh <60107333+skbeh@users.noreply.github.com> Date: Mon, 19 Aug 2024 12:08:39 +0000 Subject: [PATCH] Apply unicode normalization before checking for spam This prevents spammers from using visual identical unicode characters to bypass detection. --- .../_4drian3d/chatregulator/api/checks/SpamCheck.java | 8 +++++--- .../chatregulator/plugin/impl/StringChainImpl.java | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/io/github/_4drian3d/chatregulator/api/checks/SpamCheck.java b/api/src/main/java/io/github/_4drian3d/chatregulator/api/checks/SpamCheck.java index 92a766a..96cfdf3 100644 --- a/api/src/main/java/io/github/_4drian3d/chatregulator/api/checks/SpamCheck.java +++ b/api/src/main/java/io/github/_4drian3d/chatregulator/api/checks/SpamCheck.java @@ -10,7 +10,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Range; +import java.text.Normalizer; import java.util.Iterator; +import java.util.Locale; import static java.util.Objects.requireNonNull; @@ -39,13 +41,13 @@ private SpamCheck(final @NotNull SourceType type, int similarLimit) { String previous = null; while(it.hasNext()) { actual = it.next(); - if (previous != null && !actual.equalsIgnoreCase(previous)) { + if (previous != null && !actual.equals(previous)) { return CheckResult.allowed(); } previous = actual; } - - if (chain.last().equalsIgnoreCase(string)) { + + if (chain.last().equals(Normalizer.normalize(string.toLowerCase(Locale.ROOT), Normalizer.Form.NFKD))) { return CheckResult.denied(type()); } else { return CheckResult.allowed(); diff --git a/plugin/src/main/java/io/github/_4drian3d/chatregulator/plugin/impl/StringChainImpl.java b/plugin/src/main/java/io/github/_4drian3d/chatregulator/plugin/impl/StringChainImpl.java index fd6f418..0bf18ae 100644 --- a/plugin/src/main/java/io/github/_4drian3d/chatregulator/plugin/impl/StringChainImpl.java +++ b/plugin/src/main/java/io/github/_4drian3d/chatregulator/plugin/impl/StringChainImpl.java @@ -6,9 +6,11 @@ import io.github._4drian3d.chatregulator.common.configuration.ConfigurationContainer; import org.jetbrains.annotations.NotNull; +import java.text.Normalizer; import java.time.Instant; import java.util.Iterator; import java.util.LinkedList; +import java.util.Locale; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -90,7 +92,7 @@ public void executed(final String string) { } private void addExecution(String string) { - queue.add(string); + queue.add(Normalizer.normalize(string.toLowerCase(Locale.ROOT), Normalizer.Form.NFKD)); lastExecuted.set(Instant.now()); } }