淺談mybatis中的#和$的區(qū)別 以及防止sql注入的方法
mybatis中的#和$的區(qū)別
1. #將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)。如:order by #user_id#,如果傳入的值是111,那么解析成sql時(shí)的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".
2. $將傳入的數(shù)據(jù)直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那么解析成sql時(shí)的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id.
3. #方式能夠很大程度防止sql注入。
4.$方式無(wú)法防止Sql注入。
5.$方式一般用于傳入數(shù)據(jù)庫(kù)對(duì)象,例如傳入表名.
6.一般能用#的就別用$.
防止Sql注入
注意:SQL語(yǔ)句不要寫(xiě)成select * from t_stu where s_name like '%$name$%',這樣極易受到注入攻擊。
”${xxx}”這樣格式的參數(shù)會(huì)直接參與sql編譯,從而不能避免注入攻擊。但涉及到動(dòng)態(tài)表名和列名時(shí),只能使用“${xxx}”這樣的參數(shù)格式。
在編寫(xiě)mybatis的映射語(yǔ)句時(shí),盡量采用“#{xxx}”這樣的格式。若不得不使用“${xxx}”這樣的參數(shù),要手工地做好過(guò)濾工作,來(lái)防止sql注入攻擊。
例子
<sql id="condition_where"> <isNotEmpty property="companyName" prepend=" and "> t1.company_name like #companyName# </isNotEmpty> </sql>
java代碼和你原來(lái)的差不多,其實(shí)也沒(méi)什么不好,你要覺(jué)得麻煩 把判斷null和'%'封裝到一個(gè)方法里就可以了
if (!StringUtil.isEmpty(this.companyName)) { table.setCompanyName("%" + this.companyName + "%"); }
以上就是小編為大家?guī)?lái)的淺談mybatis中的#和$的區(qū)別 以及防止sql注入的方法全部?jī)?nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
Maven如何構(gòu)建可執(zhí)行的jar包(包含依賴(lài)jar包)
這篇文章主要介紹了Maven如何構(gòu)建可執(zhí)行的jar包(包含依賴(lài)jar包) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11SpringCloudAlibaba Nacos開(kāi)啟鑒權(quán)解決跳過(guò)登錄頁(yè)面問(wèn)題
對(duì)于Nacos,如果需要開(kāi)啟權(quán)限控制,可以在 Nacos 控制臺(tái)上進(jìn)行配置,本文主要介紹了SpringCloudAlibaba Nacos開(kāi)啟鑒權(quán)解決跳過(guò)登錄頁(yè)面問(wèn)題,感興趣的可以了解一下2023-10-10詳細(xì)介紹Java關(guān)鍵字throw?throws?Throwable的用法與區(qū)別
這篇文章主要介紹了java中throws與throw及Throwable的用法和區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04SpringCloud客戶(hù)端的負(fù)載均衡Ribbon的實(shí)現(xiàn)
微服務(wù)架構(gòu),不可避免的存在單個(gè)微服務(wù)有多個(gè)實(shí)例,這篇文章主要介紹了SpringCloud客戶(hù)端的負(fù)載均衡Ribbon的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Java自動(dòng)化工具Ant的基礎(chǔ)使用教程
這篇文章主要介紹了Java自動(dòng)化工具Ant的基礎(chǔ)使用教程,例子在Windows系統(tǒng)下操作演示,講解了Ant基本的文件操作和屬性,需要的朋友可以參考下2016-02-02MyBatis高級(jí)映射ResultMap解決屬性問(wèn)題
對(duì)于數(shù)據(jù)庫(kù)中對(duì)表的增刪改查操作,我們知道增刪改都涉及的是單表,而只有查詢(xún)操作既可以設(shè)計(jì)到單表操作又可以涉及到多表操作,所以對(duì)于輸入映射parameterType而言是沒(méi)有所謂的高級(jí)映射的,也就是說(shuō)高級(jí)映射只針對(duì)于輸出映射2023-02-02