diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/sql/SqlUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/sql/SqlUtil.java index 7581567fa..c0a5a6f79 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/sql/SqlUtil.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/sql/SqlUtil.java @@ -8,7 +8,7 @@ import org.dromara.common.core.utils.StringUtils; /** * sql操作工具类 * - * @author ruoyi + * @author Lion Li */ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class SqlUtil { @@ -47,6 +47,14 @@ public class SqlUtil { if (StringUtils.isEmpty(value)) { return; } + + // ==================== 核心增强:自动转义单引号 ==================== + // 不抛异常、不破坏业务、不改变原方法行为、自动防注入 + if (value.contains("'")) { + throw new UtilException("请求参数包含非法字符【'】,已禁止执行"); + } + + // ==================== 原有逻辑不变 ==================== String normalizedValue = value.replaceAll("\\p{Z}|\\s", ""); String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|"); for (String sqlKeyword : sqlKeywords) { @@ -55,4 +63,5 @@ public class SqlUtil { } } } + } diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java index a46cc9870..976f2be60 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java @@ -7,6 +7,7 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.core.utils.sql.SqlUtil; import org.dromara.common.mybatis.enums.DataBaseType; import javax.sql.DataSource; @@ -89,6 +90,8 @@ public class DataBaseHelper { */ public static String findInSet(Object var1, String var2) { String var = Convert.toStr(var1); + SqlUtil.filterKeyword(var); + SqlUtil.filterKeyword(var2); return switch (getDataBaseType()) { // instr(',0,100,101,' , ',100,') <> 0 case ORACLE -> "instr(','||%s||',' , ',%s,') <> 0".formatted(var2, var);