国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫(kù)技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫(kù) - Sql Server - SQL注入與防止及myBaits基本作用

SQL注入與防止及myBaits基本作用

2021-11-14 19:17guoyp2126 Sql Server

這篇文章主要為大家介紹了SQL注入與SQL防止注入方法及myBaits中基本作用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

SQL注入

在嵌入式SQL編程中,sql語(yǔ)句通常是以字符串的形式提交給數(shù)據(jù)庫(kù)管理系統(tǒng)的。SQL注入是利用SQL語(yǔ)法將一些惡意代碼加入到該字符串中,從而獲取到非授權(quán)的數(shù)據(jù)。
如:用戶(hù)登錄(假設(shè)用戶(hù)名為admin,密碼為 123456),通常使用以下語(yǔ)句進(jìn)行判斷

?
1
select * from user where username=‘admin' and password=‘123456'

如果獲取到記錄,則允許登錄,否則提示“用戶(hù)名不存在或密碼錯(cuò)誤”。加入我并不知道用戶(hù)密碼,知道用戶(hù)名為“admin”,在輸入用戶(hù)名時(shí),將用戶(hù)名變?yōu)?admin‘-- ,此時(shí)sql語(yǔ)句變?yōu)?/p>

?
1
select * from user where username=‘admin'-- and password=‘123456'

則登錄成功。如下圖密碼隨意輸入,如果沒(méi)有做任何防止SQL注入的處理,完全可以登錄成功

SQL注入與防止及myBaits基本作用

假如:用戶(hù)名我輸入的是“admin;drop table user;–”;會(huì)發(fā)生啥結(jié)果?

防止SQL注入的方法

JDBC提供的PreparedStatement可以防止SQL注入;PreparedStatement對(duì)sql預(yù)編譯后,sql語(yǔ)句中的參數(shù)需要用?代替。然后調(diào)用setXX()方法設(shè)置sql語(yǔ)句中的參數(shù)。這樣再傳入特殊值,也不會(huì)出現(xiàn)sql注入的問(wèn)題了,示例代碼如下:

?
1
2
3
4
5
6
String sql="select * from user where username='?'"+" and password='?'";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"admin");
pstmt.setString(2,"123456");
//5、執(zhí)行語(yǔ)句
ResultSet rs=pstmt.executeQuery(sql);

還有另外一種方法,就是把SQL語(yǔ)句寫(xiě)入存儲(chǔ)過(guò)程,通過(guò)存儲(chǔ)過(guò)程完成查詢(xún),同樣可以防止SQL注入。

mybaits中${}和#{}的使用

“$ ”是拼接符;使用“${} ”相當(dāng)于在高級(jí)語(yǔ)言中已經(jīng)將sql語(yǔ)句進(jìn)行拼接,而且對(duì)于變量是不加引號(hào)的,如:用戶(hù)名為admin,參數(shù)變量為 sname

?
1
2
3
select * from user where username=‘${sname}'
--此種情況下,高級(jí)語(yǔ)言交給數(shù)據(jù)庫(kù)的SQL語(yǔ)句是
select * from user where username=‘admin'

此種情況下是無(wú)法防止SQL注入的。

#{}是占位符;使用“#{} ”只能在數(shù)據(jù)庫(kù)管理系統(tǒng)中,將#{}中的參數(shù)帶入

?
1
2
3
select * from user where username=#{sname}
--此種情況下,首先經(jīng)過(guò)預(yù)編譯形成如下SQL,再將參數(shù)帶入,此時(shí)給參數(shù)值帶加單引號(hào)
select * from user where username=

此種情況下是可以防止SQL注入的

既然#{}能夠防止SQL注入,"$ {}"不能,為什么mybaits還要提供這么一個(gè)符號(hào)?,當(dāng)然有myBatis的理由,如果SQL語(yǔ)句中數(shù)據(jù)庫(kù)對(duì)象需要傳參進(jìn)去,那只能使用** ${}**。如查詢(xún)用戶(hù)表(user) ,參數(shù)變量為tableName=‘user',代碼只能是

?
1
2
3
select * from ${tableName}
//轉(zhuǎn)換為SQL語(yǔ)句為
select * from user

在myBatis中變量做為where子句中的參數(shù),一律使用#{},禁止使用“ ” , 以 防 S Q L 注 入 ; S Q L 語(yǔ) 句 中 包 含 了 數(shù) 據(jù) 庫(kù) 對(duì) 象 ( 如 表 、 視 圖 等 ) 才 能 使 用 “ {} ”,以防SQL注入;SQL語(yǔ)句中包含了數(shù)據(jù)庫(kù)對(duì)象(如表、視圖等)才能使用“ ”,以防SQL注入;SQL語(yǔ)句中包含了數(shù)據(jù)庫(kù)對(duì)象(如表、視圖等)才能使用“{} ”,因?yàn)?{},自動(dòng)給變量加上引號(hào),如上例:

?
1
2
3
select * from #{tableName}
//轉(zhuǎn)換為SQL語(yǔ)句為
select * from 'user'

以上就是SQL注入與防止及myBaits基本作用的詳細(xì)內(nèi)容,更多關(guān)于SQL注入與防止及myBaits作用的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://blog.csdn.net/guoyp2126/article/details/120636014

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美激情免费 | 91精品视频在线 | 高清国产一区二区三区四区五区 | 国产精品尤物麻豆一区二区三区 | 久久噜噜噜精品国产亚洲综合 | 精品欧美一区二区久久久伦 | 亚洲欧美在线播放 | 色婷婷一区二区三区 | 国产亚洲精品美女久久久久久久久久 | 福利久久久 | 国产精品久久久久久久久久久久 | 在线免费av电影 | 日韩精品观看 | 国产精品久久久久久久久久久小说 | 午夜羞羞 | 91成人免费在线观看 | 成年人免费观看网站 | 中文在线一区二区 | 久久男人精品 | 麻豆av在线播放 | 97久久精品午夜一区二区 | 欧美视频三区 | 日本一区二区三区免费观看 | 国产91亚洲精品 | 在线欧美日韩 | 亚洲精品wwww | 午夜免费| 色com| 日韩在线观看一区二区 | 欧美成人a| 一本一本久久a久久精品综合妖精 | 97久久久 | 免费91视频 | 精品亚洲一区二区三区四区五区 | 精品久久亚洲 | 国产成人精品免费视频大全最热 | 寡妇少妇高潮免费看蜜臀a 午夜免费电影 | 一级一片免费视频 | 久久中文视频 | 精品视频一区二区 | 午夜视频网 |