最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年01月24日 15:35:00   作者:guoyp2126  
這篇文章主要為大家介紹了SQL注入與SQL防止注入方法及MyBatis中基本作用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

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對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īng)將sql語句進(jìn)行拼接,而且對于變量是不加引號的,如:用戶名為admin,參數(shù)變量為 sname

select * from user where username=‘${sname}'
--此種情況下,高級語言交給數(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ù)值帶加單引號
select * from user where username=?

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

既然#{}能夠防止SQL注入,"$ {}"不能,為什么mybaits還要提供這么一個(gè)符號?,當(dāng)然有myBatis的理由,如果SQL語句中數(shù)據(jù)庫對象需要傳參進(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ù) 庫 對 象 ( 如 表 、 視 圖 等 ) 才 能 使 用 “ {} ”,以防SQL注入;SQL語句中包含了數(shù)據(jù)庫對象(如表、視圖等)才能使用“ ”,以防SQL注入;SQL語句中包含了數(shù)據(jù)庫對象(如表、視圖等)才能使用“{} ”,因?yàn)?{},自動(dòng)給變量加上引號,如上例:

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

 

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

相關(guān)文章

  • SQL 獲取所有上級的實(shí)現(xiàn)方法

    SQL 獲取所有上級的實(shí)現(xiàn)方法

    這篇文章主要介紹了SQL 獲取所有上級的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • SQL寫法--行行比較

    SQL寫法--行行比較

    行行比較是 SQL 規(guī)范,關(guān)系型數(shù)據(jù)庫都應(yīng)該支持這種寫法,本文通過代碼以及與其他寫法進(jìn)行比較來具體講解這一規(guī)范,大家跟隨小編一起來學(xué)習(xí)吧
    2021-08-08
  • 自增長鍵列統(tǒng)計(jì)信息的處理方法

    自增長鍵列統(tǒng)計(jì)信息的處理方法

    在這篇文章展示了SQL Server的查詢優(yōu)化器如何使用自增長鍵列統(tǒng)計(jì)信息,大家都知道SQLServer里每個(gè)統(tǒng)計(jì)信息對象都有關(guān)聯(lián)的直方圖直方圖用多個(gè)步長描述指定列數(shù)據(jù)分布情況,需要的朋友可以參考下
    2015-07-07
  • SQL?server數(shù)據(jù)庫日志文件收縮操作方法

    SQL?server數(shù)據(jù)庫日志文件收縮操作方法

    日常使用數(shù)據(jù)庫可能存在日志每天增長10G或以上,太恐怖了!數(shù)據(jù)量過大導(dǎo)致服務(wù)器卡死,內(nèi)存溢出,執(zhí)行Sql過慢等問題,這篇文章主要給大家介紹了關(guān)于SQL?server數(shù)據(jù)庫日志文件收縮操作的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • 史上超強(qiáng)最常用SQL語句大全

    史上超強(qiáng)最常用SQL語句大全

    這篇文章主要介紹了史上超強(qiáng)最常用SQL語句大全,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Sql Server 開窗函數(shù)Over()的使用實(shí)例詳解

    Sql Server 開窗函數(shù)Over()的使用實(shí)例詳解

    這篇文章主要介紹了Sql Server 開窗函數(shù)Over()的使用,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • SQL?server中視圖(view)創(chuàng)建、修改與刪除

    SQL?server中視圖(view)創(chuàng)建、修改與刪除

    這篇文章主要給大家介紹了關(guān)于SQL?server中視圖(view)創(chuàng)建、修改與刪除的相關(guān)資料,視圖(View)是從一個(gè)或多個(gè)表或其它視圖導(dǎo)出的,用來導(dǎo)出視圖的表稱為基表,導(dǎo)出的視圖又稱為虛表,需要的朋友可以參考下
    2024-01-01
  • 關(guān)于存儲(chǔ)過程的編寫的一些體會(huì)

    關(guān)于存儲(chǔ)過程的編寫的一些體會(huì)

    下面我來介紹下存儲(chǔ)過程的編寫數(shù)據(jù)庫存儲(chǔ)過程的實(shí)質(zhì)就是部署在數(shù)據(jù)庫端的一組定義代碼以及SQL
    2010-09-09
  • SQL Server修改標(biāo)識列方法 如自增列的批量化修改

    SQL Server修改標(biāo)識列方法 如自增列的批量化修改

    最近在運(yùn)行系統(tǒng)時(shí)需要對所有服務(wù)器上數(shù)據(jù)結(jié)構(gòu)進(jìn)行批量修改某個(gè)字段的自增屬性改成非自增
    2012-05-05
  • sql?server如何去除數(shù)據(jù)中的一些無用的空格

    sql?server如何去除數(shù)據(jù)中的一些無用的空格

    這篇文章主要介紹了sql?server去除數(shù)據(jù)中的一些無用的空格,本文給大家提到了一些常用的函數(shù),結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05

最新評論

常宁市| 周至县| 大田县| 凭祥市| 平乐县| 佛山市| 淮北市| 江永县| 名山县| 扶风县| 朔州市| 西乌珠穆沁旗| 随州市| 中卫市| 华池县| 大同县| 永康市| 平舆县| 平果县| 饶河县| 延庆县| 盐边县| 商水县| 来凤县| 桐庐县| 沙田区| 元阳县| 西华县| 陇南市| 康定县| 五台县| 洪江市| 射阳县| 元谋县| 云浮市| 武乡县| 遵义县| 连城县| 西华县| 渭南市| 南雄市|