使用mybatis時防止sql注入

2021-09-02 20:47:59 字數 1531 閱讀 7201

[size=large][b]一.where條件 like 注入[/b]

錯誤**示例:select id,name from user where name like '$%'

注入方式1:在文字框直接把name對應的值寫為%,那後端sql直接變為select id,name from user where name 『%%』將把所有資料給查出來。

注入方式2:將錯誤示例**改為select id,name from user where name like '$%』and id=1在文字框直接把name對應的值寫為%' or '1'='1,那後端sql直接變為select id,name from user where name 『%%』將把所有資料給查出來。

解決辦法:將sql改為[/size]

select id,name from user where name like concat(#,'%』)或select id,name from user where name like #||』%』
[size=large],但這樣僅能避免注入方式2的漏洞,還需要判斷name是否為空或是否包含%,如果不包含再走like 語句。

[b]二、in 條件注入[/b]

錯誤**示例:select id,name from user where id in ($)

注入方式:直接把ids設定為1) or (1=1即可完成注入,sql將變為select id,name from user where id in (1) or (1=1),將查出全部資料

解決辦法:將sql改為通過foreach結構,如:[/size]

select id,name from user

id in

#

[size=large]

[b]三、列名、表名、order by 注入[/b]

這幾種只能使用$這種格式的,經過測試及資料查閱暫時沒有好的解決辦法,建議在寫的時候盡量避免

用$形式的動態變數,如表不多的話,可以複製幾個一樣的sql把表名換下,對於分表的,需要對動態變數進行校驗及匹配,

列名、order by 後面的列名同樣。另外避免在前端頁面可傳入這些資料。

這幾類sql注入方式如下:

1.列名注入方式:select $ name from user,將column賦值為 (select sleep(5)) ,sql則變為select (select sleep(5)) from user;或已知其他列名,將column改為pwd,sql則變為 select pwd name from user;

2.表名注入:select name,age from $ ,將column賦值為(select pwd name,prex age from dept) b,則sql變為select name,age from (select pwd name,prex age from dept) b,用另外已知的表偽裝成正常表返回資料。

[b]四、${}存在sql注入風險[/b]

能用#{}的盡量用這個,正常where 條件中禁止使用${}。[/size]

mybatis防止sql注入

sql注入大家都不陌生,是一種常見的攻擊方式,攻擊者在介面的表單資訊或url上輸入一些奇怪的sql片段,例如 or 1 1 這樣的語句,有可能入侵引數校驗不足的應用程式 所以在我們的應用中需要做一些工作,來防備這樣的攻擊方式。在一些安全 性很高的應用中,比如銀行軟體,經常使用將sql語句全部替換為儲...

mybatis防止sql注入

sql注入大家都不陌生,是一種常見的攻擊方式,攻擊者在介面的表單資訊或url上輸入一些奇怪的sql片段,例如 or 1 1 這樣的語句,有可能入侵引數校驗不足的應用程式。所以在我們的應用中需要做一些工作,來防備這樣的攻擊方式。在一些安全性很高的應用中,比如銀行軟體,經常使用將sql語句全部替換為儲存...

mybatis 防止sql注入

1 和 符號的差異 相當於jdbc中的preparedstatement 相當於jdbc中的statement,使用字串拼接的形式 簡單說,是經過預編譯的,是安全的 是未經過預編譯的,僅僅是取變數的值,是非安全的,存在sql注入。使用時盡量使用 不得已使用 則相應對輸入值進行必要的校驗,防止sql注...