1、sql注入问题
在编写分页查询接口时,无论是使用MyBatis或者是MyBatis-Plus,查询条件一般为:
QueryWrapper<MyEntity> queryWrapper = newQueryWrapper<>();
queryWrapper.like("field_name", param);
此时,如果param的值为%或者_,那么MyBatis或者是MyBatis-Plus在拼接sql时
参数会变为:
'%%%'或者'%_%'。此时进行查询肯定是能查到数据的,而且匹配所有条件。
解决:
1、常规方法:#{}
编写相应的sql替代queryWrapper,使用#{}能预编译参数,可以解决sql注入问题。
2、提前处理参数
private String replaceStr(String str){
if (str.contains("%") || str.contains("_")) {
// 针对传入参数包含“_”和“%"进行处理
str = str.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_");
}
return str;
}