package org.jeecg.common.util.security; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.util.oConvertUtils; /** * jdbc连接校验 * @Author taoYan * @Date 2022/8/10 18:15 **/ public class JdbcSecurityUtil { /** * 连接驱动漏洞 最新版本修复后,可删除相应的key * postgre:authenticationPluginClassName, sslhostnameverifier, socketFactory, sslfactory, sslpasswordcallback * https://github.com/pgjdbc/pgjdbc/security/advisories/GHSA-v7wg-cpwc-24m4 * */ public static final String[] notAllowedProps = new String[]{"authenticationPluginClassName", "sslhostnameverifier", "socketFactory", "sslfactory", "sslpasswordcallback"}; /** * 校验sql是否有特定的key * @param jdbcUrl * @return */ public static void validate(String jdbcUrl){ if(oConvertUtils.isEmpty(jdbcUrl)){ return; } String urlConcatChar = "?"; if(jdbcUrl.indexOf(urlConcatChar)<0){ return; } String argString = jdbcUrl.substring(jdbcUrl.indexOf(urlConcatChar)+1); String[] keyAndValues = argString.split("&"); for(String temp: keyAndValues){ String key = temp.split("=")[0]; for(String prop: notAllowedProps){ if(prop.equalsIgnoreCase(key)){ throw new JeecgBootException("连接地址有安全风险,【"+key+"】"); } } } } }