自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

mybatis如何防止SQL注入?

開(kāi)發(fā)
sql注入發(fā)生的時(shí)間,sql注入發(fā)生的階段在sql預(yù)編譯階段,當(dāng)編譯完成的sql不會(huì)產(chǎn)生sql注入

 

[[344248]]

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

  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ǔ)過(guò)程,存儲(chǔ)過(guò)程其實(shí)也是預(yù)編譯的,存儲(chǔ)過(guò)程是sql語(yǔ)句的集合,將所有預(yù)編譯的sql 語(yǔ)句編譯完成后,存儲(chǔ)在數(shù)據(jù)庫(kù)上,

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

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

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

  1. <select id="findById" resultType="String"
  2.     select name from user where id = #{userid}; 
  3. </select

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

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

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

select name from usre where id = ?;

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

如果將查詢(xún)語(yǔ)句改寫(xiě)為:

  1. <select id="findById" resultType = "String"
  2. select name from user where id=${userid} 
  3. </select

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

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

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

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

 

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2020-08-07 08:13:08

SQL攻擊模式

2009-03-14 16:50:38

網(wǎng)站安全meter程序

2009-02-04 16:51:48

2009-07-24 16:59:57

iBatis模糊查詢(xún)

2010-10-22 15:18:18

SQL注入漏洞

2013-01-05 13:49:00

2014-05-26 09:32:15

2009-03-10 08:05:19

2011-12-30 11:04:14

2013-04-26 11:26:00

2017-03-01 14:16:20

2023-08-01 08:00:00

SQLWeb應(yīng)用安全

2013-01-15 10:53:36

2013-01-16 14:29:22

2023-03-10 19:36:47

2010-12-20 16:04:30

2009-11-12 14:56:47

2019-02-22 09:00:00

2021-09-16 09:05:45

SQL注入漏洞網(wǎng)絡(luò)攻擊

2020-10-10 10:10:07

安全漏洞技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)