最近在使用druid連接池,同時也配置了web和spring的關聯監控,檢測到select * from tables param like #{param1} “%”的語句被攔截了。做個筆記。
解決方法有兩種:
一、 select * from tables param like concat(${param1},”%”)。
二、傳入 參數的時候動態拼接 param1=param1+”%”;
select * from tables param like #{param1}。
Mybatis3 防止SQL注入
#{xxx},使用的是PreparedStatement,會有類型轉換,所以比較安全;
${xxx},使用字符串拼接,可以SQL注入;
like查詢不小心會有漏動,正確寫法如下:
Mysql: select * from tables where param like concat(‘%’, #{param1}, ‘%’)
Oracle: select * from t_user where param like ‘%’ || #{param1} || ‘%’
SQLServer: select * from t_user where param like ‘%’ + #{param1} + ‘%’