java修复sql注入问题常用方法
一、简要总结
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..net/zhan_qian/article/details/123316985 https://blog..net/weixin_45694388/article/details/121314539
下一篇:
【Java高级特性】I/O流——认识流
