一、简要总结
1.把xml里的$换成#
2.部分不好换的地方,尝试使用bind标签,看能否实现需求。例如:
<if test=" user_name != null and user_name != '' ">
<bind name="user_name_bind" value = "'%'+user_name+'%'" />
<![CDATA[ AND A.user_name like (#{user_name_bind}) ]]>
</if>
3.使用过滤器,对httpRequest的入参进行过滤,例如:
/**
* 将容易引起sql注入漏洞的半角字符直接替换成全角字符
*
* @param s
* @return
*/
public static String sqlInjectionEncode(String s) {
if (s == null || s.isEmpty()) {
return s;
}
StringBuilder sb = new StringBuilder(s.length() + 16);
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case '>':
sb.append('>');//全角大于号
break;
case '<':
sb.append('<');//全角小于号
break;
case '&':
sb.append('&');//全角
break;
case '\\':
sb.append('\');//全角斜线
break;
case '#':
sb.append('#');//全角井号
break;
/以下是新增的,出问题时可以注释或调整///
//引号可能不能换,传json可能会用
case '\'':
sb.append('‘');//全角单引号
break;
case '\"':
sb.append('“');//全角双引号
break;
case '+':
sb.append('+');
break;
case '-':
sb.append('-');
break;
case '*':
sb.append('*');
break;
case '/':
sb.append('÷');
break;
case '=':
sb.append('≡');
break;
case '[':
sb.append('[');
break;
case ']':
sb.append(']');
break;
case '(':
sb.append('(');
break;
case ')':
sb.append(')');
break;
case '{':
sb.append('{');
break;
case '}':
sb.append('}');
break;
/以上是新增的,出问题时可以注释或调整///
default:
sb.append(c);
break;
}
}
return sb.toString();
}
二、相关链接:
https://wenku.baidu.com/view/c39182f36c1aff00bed5b9f3f90f76c661374cfd.html
https://blog.csdn.net/zhan_qian/article/details/123316985
https://blog.csdn.net/weixin_45694388/article/details/121314539