diff --git a/common/src/main/java/com/jeesite/common/codec/EncodeUtils.java b/common/src/main/java/com/jeesite/common/codec/EncodeUtils.java
index dc3bf9cf..f02fd61f 100644
--- a/common/src/main/java/com/jeesite/common/codec/EncodeUtils.java
+++ b/common/src/main/java/com/jeesite/common/codec/EncodeUtils.java
@@ -31,8 +31,9 @@ import com.jeesite.common.lang.StringUtils;
* 2.自制的base62 编码
* 3.Commons-Lang的xml/html escape
* 4.JDK提供的URLEncoder
- * @author calvin
- * @version 2013-01-15
+ * 5、XSS、SQL、orderBy 过滤器
+ * @author calvin、ThinkGem
+ * @version 2022-2-17
*/
public class EncodeUtils {
@@ -270,7 +271,7 @@ public class EncodeUtils {
}
if (logger.isInfoEnabled() && !value.equals(oriValue)){
logger.info("xssFilter: {} <=<=<= {} source: {}", value, text,
- request != null ? request.getRequestURL() : StringUtils.EMPTY);
+ request != null ? request.getRequestURL() : "common");
}
return value;
}
@@ -279,16 +280,18 @@ public class EncodeUtils {
// 预编译SQL过滤正则表达式
private static Pattern sqlPattern = Pattern.compile(
- "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|((extractvalue|updatexml|if|mid|database)([\\s]*?)\\()|"
- + "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute|case when|sleep|union|load_file)\\b)",
+ "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|((extractvalue|updatexml|if|mid|database|rand|user)([\\s]*?)\\()|"
+ + "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|"
+ + "drop|execute|case when|sleep|union|load_file)\\b)",
Pattern.CASE_INSENSITIVE);
+ private static Pattern orderByPattern = Pattern.compile("[a-z0-9_\\.\\, ]*", Pattern.CASE_INSENSITIVE);
/**
* SQL过滤,防止注入,传入参数输入有select相关代码,替换空。
* @author ThinkGem
*/
public static String sqlFilter(String text){
- return sqlFilter(text, null);
+ return sqlFilter(text, "common");
}
/**
* SQL过滤,防止注入,传入参数输入有select相关代码,替换空。
@@ -297,9 +300,16 @@ public class EncodeUtils {
public static String sqlFilter(String text, String source){
if (text != null){
String value = text;
- Matcher matcher = sqlPattern.matcher(value);
- if (matcher.find()) {
- value = matcher.replaceAll(StringUtils.EMPTY);
+ if ("orderBy".equals(source)) {
+ Matcher matcher = orderByPattern.matcher(value);
+ if (!matcher.matches()) {
+ value = StringUtils.EMPTY;
+ }
+ } else {
+ Matcher matcher = sqlPattern.matcher(value);
+ if (matcher.find()) {
+ value = matcher.replaceAll(StringUtils.EMPTY);
+ }
}
if (logger.isWarnEnabled() && !value.equals(text)){
logger.info("sqlFilter: {} <=<=<= {} source: {}", value, text, source);
@@ -310,38 +320,38 @@ public class EncodeUtils {
return null;
}
- public static void main(String[] args) {
- int i = 0;
-// xssFilter((++i)+"你好,我还在。");
-// xssFilter((++i)+"你好,加粗文字我还在。");
-// xssFilter(""+(++i)+"你好,\">加粗文字我还在。");
-// xssFilter(""+(++i)+"你好,加粗文字我还在。");
-// xssFilter(""+(++i)+"你好,