在网络安全日益重视之下,在历史代码的中看到这样的一个小工具类,会起到一定的作用,学习后分享出来。公司老代码~~~
import org.apache.commons.lang3.StringUtils;
import java.util.Map;
/**
* SQL过滤
*/
public class SQLFilter {
/**
* SQL注入过滤
*
* @param str
* 待验证的字符串
*/
public static String sqlInject(String str) {
if (StringUtils.isBlank(str)) {
return null;
}
// 去掉'|"|;|\字符
str = StringUtils.replace(str, "'", "''");
str = StringUtils.replace(str, "\"", "'\"");
str = StringUtils.replace(str, ";", "';");
str = StringUtils.replace(str, "\\", "'\\");
// 模糊查询筛选的字符
str = StringUtils.replace(str, "%", "\\%");
str = StringUtils.replace(str, "_", "\\_");
// 转换成小写
String str1 = str.toLowerCase();
// 非法字符
String[] keywords = {"master", "truncate", "insert", "select", "delete", "update", "declare", "alert", "drop"};
// 判断是否包含非法字符
for (String keyword : keywords) {
if (str1.indexOf(keyword) != -1) {
System.out.println(str1);
// throw new RdssException("包含非法字符");
}
}
return str;
}
/**
* 针对接口参数进行过滤,过滤特殊字符
*
* @param params
*/
public static void sqlInjectParam(Map<String, Object> params) {
for (Sting key : params.keySet()) {
params.put(key,sqlInject((String)params.get(key)));
}
}
}