91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL注入與防止及myBaits基本作用是怎樣的

發布時間:2021-10-09 18:13:43 來源:億速云 閱讀:148 作者:柒染 欄目:開發技術

這期內容當中小編將會給大家帶來有關SQL注入與防止及myBaits基本作用是怎樣的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

SQL注入

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

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

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

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注入的問題了,示例代碼如下:

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

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

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

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

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

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

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

select * from ${tableName}
//轉換為SQL語句為
select * from user

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

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

上述就是小編為大家分享的SQL注入與防止及myBaits基本作用是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹿邑县| 临沂市| 凤凰县| 常熟市| 红桥区| 东山县| 灵武市| 白山市| 达孜县| 东丰县| 寿光市| 平山县| 呼玛县| 罗江县| 平顺县| 忻州市| 东平县| 邵武市| 兰考县| 余姚市| 开原市| 曲沃县| 泽库县| 八宿县| 璧山县| 岳阳市| 阳曲县| 张掖市| 滕州市| 商洛市| 巨野县| 收藏| 宜春市| 安福县| 天祝| 伊宁市| 平原县| 湟中县| 克什克腾旗| 崇州市| 额济纳旗|