mybatis中查詢使用#{}和${}的區別


${}中的變量什么值,就會簡單的替代變量,不會做處理

比如delete * from tb_label where name=${labelname}

如果labelname的值是 something' or 'x'='x

替換后的結果就是delete * from tb_label where name='something' and 'x'='x'

這樣就不能防止注入攻擊

#{}可以防止注入攻擊,以為傳入的參數會處理一下,自動給傳入變量的值加上單引號,並且有的字符會做轉譯處理

同樣上面的情況替換后就會變成下面的語句.

delete * from tb_label where name='something\' and \'x\'=\'x'

這樣就會查不到數據,有效防止sql的數據注入攻擊。

 

 

注意的是,普通的數據類型使用${value}里面的value值時必須的,不能變的,當然不建議使用${}

 

下面是一個坑,自己以身試坑,紅色部分不能使用單引號括起來,這部分還有一種寫法就是%${labelname}%,下面的這種是利用"%"'labelname'"%"這種sql的數據庫查詢語句

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM