1. 程式人生 > >mybatis like %% 模糊查詢防sql 注入

mybatis like %% 模糊查詢防sql 注入

所以解決的思路是:sql中應該跟正常的替換方式相同,ibatis並沒有提供特殊寫法,應該在傳入的引數上下功夫。

也就意味著需要自己來做轉譯。

SQL文:

select * from A where A.name like #{key}


java端對Key值進行轉譯:

    public static String transfer(String keyword) {
        if(keyword.contains("%") || keyword.contains("_")){ 
            keyword = keyword.replaceAll("\\\\", "\\\\\\\\") 
                             .replaceAll("\\%", "\\\\%") 
                             .replaceAll("\\_", "\\\\_");
        }
        return keyword;
    }


然後再轉譯後的key上,按照邏輯新增“%”或者“_”,再設定到statement中即可。

例如:前方一致檢索

key = transfer(key) + "%";
注意:上面的轉譯方法適用於jdk1.6,之前的可能需要將第一個.replaceAll("\\\\", "\\\\\\\\")

改成:.replaceAll("\\", "\\\\") 即可。