激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - SQL注入與防止及myBaits基本作用

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

2021-11-14 19:17guoyp2126 Sql Server

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

SQL注入

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

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

如果獲取到記錄,則允許登錄,否則提示“用戶名不存在或密碼錯誤”。加入我并不知道用戶密碼,知道用戶名為“admin”,在輸入用戶名時,將用戶名變為 admin‘-- ,此時sql語句變為

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

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

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

假如:用戶名我輸入的是“admin;drop table user;–”;會發生啥結果?

防止SQL注入的方法

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

?
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、執行語句
ResultSet rs=pstmt.executeQuery(sql);

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

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

“$ ”是拼接符;使用“${} ”相當于在高級語言中已經將sql語句進行拼接,而且對于變量是不加引號的,如:用戶名為admin,參數變量為 sname

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

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

#{}是占位符;使用“#{} ”只能在數據庫管理系統中,將#{}中的參數帶入

?
1
2
3
select * from user where username=#{sname}
--此種情況下,首先經過預編譯形成如下SQL,再將參數帶入,此時給參數值帶加單引號
select * from user where username=

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

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

?
1
2
3
select * from ${tableName}
//轉換為SQL語句為
select * from user

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

?
1
2
3
select * from #{tableName}
//轉換為SQL語句為
select * from 'user'

以上就是SQL注入與防止及myBaits基本作用的詳細內容,更多關于SQL注入與防止及myBaits作用的資料請關注服務器之家其它相關文章!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 97久色| 毛片免费视频播放 | 免费a级观看 | 欧美3p激情一区二区三区猛视频 | 欧美在线成人影院 | 九色中文字幕 | 黄网站免费观看视频 | 久久久久二区 | 亚洲影院在线 | 九九热在线精品视频 | 久久亚洲第一 | 成人在线观看一区 | 日日草天天干 | 精品久久久久久久久久久久久久 | 日本中文视频 | 久久国产精品久久久久久久久久 | 久久网综合 | 欧洲色阁中文字幕 | 古装三级在线观看 | 99一区二区三区 | 国产资源视频在线观看 | 中文区中文字幕免费看 | 欧美日韩夜夜 | 国产亚洲综合精品 | 国产精品久久久在线观看 | 国产草草视频 | 色播av在线 | 久久国产精品久久精品国产演员表 | 欧美中文日韩 | 国产精品免费一区二区三区都可以 | 色妞视频男女视频 | 久久老司机 | 欧美日韩高清在线观看 | 欧美亚洲国产一区 | 久久久久国产成人精品亚洲午夜 | 一区二区精品视频 | 国内精品久久久久久久久久 | 午夜伦情电午夜伦情电影 | 亚洲国产精品高潮呻吟久久 | 看免费5xxaaa毛片 | 欧美日韩在线播放 |