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流——认识流