日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
mybatis如何防止SQL注入?

一、采用jdbc操作數(shù)據(jù)時(shí)候

成都創(chuàng)新互聯(lián)公司于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元鳩江做網(wǎng)站,已為上家服務(wù),為鳩江各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

 
 
 
  1. String sql = "update ft_proposal set id = "+id; 
  2.         PreparedStatement prepareStatement = conn.prepareStatement(sql); 
  3.         prepareStatement.executeUpdate(); 

preparedStatement 預(yù)編譯對(duì)象會(huì)對(duì)傳入sql進(jìn)行預(yù)編譯,那么當(dāng)傳入id 字符串為 "update ft_proposal set id = 3;drop table ft_proposal;" 這種情況下就會(huì)導(dǎo)致sql注入刪除ft_proposal這張表。

如何防止sql注入,首先將要執(zhí)行sql進(jìn)行預(yù)編譯,然后在將占位符進(jìn)行替換

 
 
 
  1. String sql = "update ft_proposal set id = ?" 
  2. PreparedStatement ps = conn.preparedStatement(sql); 
  3. ps.setString(1,"2"); 
  4. ps.executeUpdate(); 

處理使用預(yù)編譯語(yǔ)句之外,另一種實(shí)現(xiàn)方式可以采用存儲(chǔ)過程,存儲(chǔ)過程其實(shí)也是預(yù)編譯的,存儲(chǔ)過程是sql語(yǔ)句的集合,將所有預(yù)編譯的sql 語(yǔ)句編譯完成后,存儲(chǔ)在數(shù)據(jù)庫(kù)上,

由于存儲(chǔ)過程比較死板一般不采用這種方式進(jìn)行處理。

二、mybatis是如何處理sql注入的?

假設(shè)mapper.xml文件中sql查詢語(yǔ)句為:

 
 
 
  1.  
  2.     select name from user where id = #{userid}; 
  3.  

對(duì)應(yīng)的接口為:

 
 
 
  1. public String findById(@param("userId")String userId); 

當(dāng)傳入的參數(shù)為3;drop table user; 當(dāng)我們執(zhí)行時(shí)可以看見打印的sql語(yǔ)句為:

select name from usre where id = ?;

不管輸入何種參數(shù)時(shí),都可以防止sql注入,因?yàn)閙ybatis底層實(shí)現(xiàn)了預(yù)編譯,底層通過prepareStatement預(yù)編譯實(shí)現(xiàn)類對(duì)當(dāng)前傳入的sql進(jìn)行了預(yù)編譯,這樣就可以防止sql注入了。

如果將查詢語(yǔ)句改寫為:

 
 
 
  1.  
  2. select name from user where id=${userid} 
  3.  

當(dāng)輸入?yún)?shù)為3;drop table user; 執(zhí)行sql語(yǔ)句為

 
 
 
  1. select name from user where id = 3;drop table user ; 

mybatis沒有進(jìn)行預(yù)編譯語(yǔ)句,它先進(jìn)行了字符串拼接,然后進(jìn)行了預(yù)編譯。這個(gè)過程就是sql注入生效的過程。

因此在編寫mybatis的映射語(yǔ)句時(shí),盡量采用“#{xxx}”這樣的格式。若不得不使用“${xxx}”這樣的參數(shù),要手工地做好過濾工作,來防止sql注入攻擊。


網(wǎng)頁(yè)題目:mybatis如何防止SQL注入?
文章出自:http://www.dlmjj.cn/article/cdccgec.html