0
点赞
收藏
分享

微信扫一扫

SQL注入正则拦截器


private static final Pattern PATTERN = Pattern.compile("\\b(\\s*and\\s*|\\s*exec\\s*|\\s*insert\\s*|\\s*select\\s*|\\s*drop\\s*|\\s*grant\\s*|\\s*alter\\s*|\\s*" +
"delete\\s*|\\s*update\\s*|\\s*count\\s*|\\s*chr\\s*|\\s*mid\\s*|\\s*master\\s*|\\s*truncate\\s*|\\s*char\\s*|\\s*declare\\s*|\\s*or\\s*)\\b|(\\*|;|\\+)");

/**
* @Description: sql注入正则校验
* @Author: 王晨阳
* @Date: 2022/3/24-14:04
*/
protected static boolean sqlValidate(String str){
//统一转为小写
String s = str.toLowerCase();
//使用pattern.matcher获取匹配器
Matcher matcher = PATTERN.matcher(s);
//使用匹配器的matches方法进行正则匹配
return matcher.find();
}

/**
* @Description: 校验入参是否有sql注入
* @Author: 王晨阳
* @Date: 2022/3/24-15:30
*/
public static String judgeSqlInject(Map<String, Object> paras) {
if (MapUtils.isEmpty(paras)) {
return null;
}
for (String key:paras.keySet()) {
Object val = paras.get(key);
if (Objects.isNull(val)) {
continue;
}
if (val instanceof List) {
List<Map<String, Object>> list = (List<Map<String, Object>>)val;
for (Map<String, Object> map:list) {
String value = judgeSqlInject(map);
if (!StringUtils.isBlank(value)) {
Log.info("【存在sql注入风险】 {}", key);
return key + " 存在sql注入风险";
}
}
} else if (val instanceof Map) {
Map<String, Object> map = (Map<String, Object>)val;
String value = judgeSqlInject(map);
if (!StringUtils.isBlank(value)) {
Log.info("【存在sql注入风险】 {}", key);
return key + " 存在sql注入风险";
}
} else {
String value = String.valueOf(val);
if (sqlValidate(value)) {
Log.info("【存在sql注入风险】 {}", key);
return key + " 存在sql注入风险";
}
}
}
return null;
}


举报

相关推荐

0 条评论