${}中的變量什么值,就會簡單的替代變量,不會做處理
比如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的數據庫查詢語句