iBatis解決sql注入問題的方法

2021-08-27 14:42:59 字數 1258 閱讀 2177

類似下列這種寫法是採用preparedstatement實現,是不會引起sql注入的

name like #name#

但是它跟

name = #name#

沒有區別,沒有實現模糊查詢,實現模糊查詢的簡單方法是這樣:

name like '%$name$%'

但這時會導致sql注入問題,比如引數name傳進乙個單引號「'」,生成的sql語句會是:

name like '%'%'

這樣肯定是會報錯的,解決方法是利用字串連線的方式來構成sql語句,如下:

name like '%'||'#name#'||'%'

(「||」是oracle中連線字串的方法,mssql中是用加號,mysql中是用concat)

這樣引數都會經過預編譯,就不會發生sql注入問題了。

----------------------

對於ibaits引數引用可以使用#和$兩種寫法,其中#寫法會採用預編譯方式,將轉義交給了資料庫,不會出現注入問題;如果採用$寫法,則相當於拼接字串,會出現注入問題。

例如,如果屬性值為「' or '1'='1 」,採用#寫法沒有問題,採用$寫法就會有問題。

對於like語句,難免要使用$寫法,

1. 對於oracle可以通過'%'||'#param#'||'%'避免;

2. 對於mysql可以通過concat('%',#param#,'%')避免;

3. mssql中通過'%'+#param#+'% 。 

如下3種sql語句:

[sql]view plain

copy

mysql: 

select

* from

t_user 

where

name

like

concat(

'%',#

name

#,'%'

)    

oracle: select

* from

t_user 

where

name

like

'%'||#

name

#||'%'

sql server:select

* from

t_user 

where

name

like

'%'+#

name

#+'%     

ibatis解決sql注入問題

最近看看了sql注入的問題,這篇文章解決了ibatis如何防sql注入攻擊,值得參考,對於ibaits引數引用可以使用 和 兩種寫法,其中 寫法會採用預編譯方式,將轉義交給了資料庫,不會出現注入問題 如果採用 寫法,則相當於拼接字串,會出現注入問題。例如,如果屬性值為 or 1 1 採用 寫法沒有問...

ibatis解決sql注入問題

對於ibaits引數引用可以使用 和 兩種寫法,其中 寫法會採用預編譯方式,將轉義交給了資料庫,不會出現注入問題 如果採用 寫法,則相當於拼接字串,會出現注入問題。例如,如果屬性值為 or 1 1 採用 寫法沒有問題,採用 寫法就會有問題。對於like語句,難免要使用 寫法,1.對於oracle可以...

通過ibatis解決sql注入問題

於iba程式設計客棧its引數引用可以使用 和兩種寫法,其中 寫法會採用預編譯方式,將轉義交給了資料庫,不會出現注入問題 如果採用兩種寫法,其中 寫法會採用預編譯方式,將轉義交給了資料庫,不會出現注入問題 如果採用寫法,則相當於拼接字串,會出現注入問題。例如,如果屬性值為 or 1 1 採用 寫法沒...