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

经验分享 程序员 微信小程序 职场和发展