人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

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

發(fā)布日期:2022-01-30 20:02 | 文章來源:腳本之家

SQL注入

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

select * from user where username=‘a(chǎn)dmin' and password=‘123456'

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

select * from user where username=‘a(chǎn)dmin'-- and password=‘123456'

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

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

防止SQL注入的方法

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

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

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

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

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

select * from user where username=‘${sname}'
--此種情況下,高級(jí)語言交給數(shù)據(jù)庫的SQL語句是
select * from user where username=‘a(chǎn)dmin'

此種情況下是無法防止SQL注入的。

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

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

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

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

select * from ${tableName}
//轉(zhuǎn)換為SQL語句為
select * from user

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

select * from #{tableName}
//轉(zhuǎn)換為SQL語句為
select * from 'user'

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

香港快速服務(wù)器

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部