diff --git a/taier-data-develop/src/main/java/com/dtstack/taier/develop/interceptor/LoginInterceptor.java b/taier-data-develop/src/main/java/com/dtstack/taier/develop/interceptor/LoginInterceptor.java index 4bcdbc7aad..bae487448c 100644 --- a/taier-data-develop/src/main/java/com/dtstack/taier/develop/interceptor/LoginInterceptor.java +++ b/taier-data-develop/src/main/java/com/dtstack/taier/develop/interceptor/LoginInterceptor.java @@ -21,12 +21,14 @@ import com.dtstack.taier.common.constant.CommonConstant; import com.dtstack.taier.common.exception.ErrorCode; import com.dtstack.taier.common.exception.TaierDefineException; +import com.dtstack.taier.develop.service.user.TokenService; import com.dtstack.taier.develop.utils.CookieUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -34,6 +36,10 @@ public class LoginInterceptor extends HandlerInterceptorAdapter { private static Logger LOGGER = LoggerFactory.getLogger(LoginInterceptor.class); + + @Resource + private TokenService tokenService; + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String requestURI = request.getRequestURI(); @@ -47,6 +53,8 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons if (StringUtils.isBlank(token)) { throw new TaierDefineException(ErrorCode.NOT_LOGIN); } + tokenService.decryption(token); + return true; } } diff --git a/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-libra/pom.xml b/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-libra/pom.xml index 99a4958ac3..db6598708c 100644 --- a/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-libra/pom.xml +++ b/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-libra/pom.xml @@ -19,7 +19,7 @@ libra Libra - 42.2.2 + 42.2.25 diff --git a/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-postgresql/pom.xml b/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-postgresql/pom.xml index 2413ce1efc..fcae1b9b73 100644 --- a/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-postgresql/pom.xml +++ b/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-postgresql/pom.xml @@ -18,7 +18,7 @@ postgresql Postgresql - 42.2.2 + 42.2.25 diff --git a/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-rdbms/src/main/java/com/dtstack/taier/datasource/plugin/rdbms/ConnFactory.java b/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-rdbms/src/main/java/com/dtstack/taier/datasource/plugin/rdbms/ConnFactory.java index 923e8825b9..643c55469e 100644 --- a/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-rdbms/src/main/java/com/dtstack/taier/datasource/plugin/rdbms/ConnFactory.java +++ b/taier-datasource/taier-datasource-plugin/taier-datasource-plugin-rdbms/src/main/java/com/dtstack/taier/datasource/plugin/rdbms/ConnFactory.java @@ -40,8 +40,11 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Properties; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; @@ -75,6 +78,14 @@ public class ConnFactory { private static final String CP_POOL_KEY = "url:%s,username:%s,password:%s,properties:%s"; + /** + * filter with db property + */ + private static final Set DANGEROUS_PARAMS = new HashSet<>(Arrays.asList( + "autoDeserialize", "allowLoadLocalInfile", "allowUrlInLocalInfile", + "queryInterceptors", "socketFactory", "socketFactoryArg" + )); + /** * 线程池 - 用于部分数据源获取连接超时处理 */ @@ -157,6 +168,17 @@ protected Connection getSimpleConn(ISourceDTO source) throws Exception { init(); DriverManager.setLoginTimeout(30); log.info("datasource connected, url : {}, userName : {}, kerberosConfig : {}", rdbmsSourceDTO.getUrl(), rdbmsSourceDTO.getUsername(), rdbmsSourceDTO.getKerberosConfig()); + // property check + String urlLower = rdbmsSourceDTO.getUrl().toLowerCase(); + for (String dangerousParam : DANGEROUS_PARAMS) { + if (urlLower.contains("?" + dangerousParam + "=") || + urlLower.contains("&" + dangerousParam + "=") || + urlLower.contains("?" + dangerousParam + "%3d") || + urlLower.endsWith("?" + dangerousParam)) { + throw new SecurityException("Dangerous JDBC parameter detected: " + dangerousParam); + } + } + return DriverManager.getConnection(rdbmsSourceDTO.getUrl(), PropertiesUtil.convertToProp(rdbmsSourceDTO)); }