精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

小心你的WEB應(yīng)用程序成為數(shù)據(jù)竊賊的幫兇

安全
當(dāng)心,你以為固若金湯的數(shù)據(jù)庫(kù)可能已遭到了入侵。你需要重新思考一下自己公司的網(wǎng)站是否真得不會(huì)遭到SQL注入攻擊。本文將闡述攻擊者如何通過(guò)這種方法來(lái)利用Web應(yīng)用程序的漏洞。有時(shí),即使攻擊者也不了解自己正在利用的漏洞的性質(zhì)。

當(dāng)心,你以為固若金湯的數(shù)據(jù)庫(kù)可能已遭到了入侵。你需要重新思考一下自己公司的網(wǎng)站是否真得不會(huì)遭到SQL注入攻擊。SQL注入是最流行也是最危險(xiǎn)的Web應(yīng)用程序漏洞利用技術(shù),它可以攻擊存儲(chǔ)著珍貴企業(yè)信息的后端數(shù)據(jù)庫(kù),且“簡(jiǎn)約高效”。

本文將闡述攻擊者如何通過(guò)這種方法來(lái)利用Web應(yīng)用程序的漏洞。有時(shí),即使攻擊者也不了解自己正在利用的漏洞的性質(zhì)。

何為SQL注入

就其最基本的意義來(lái)說(shuō),SQL注入只不過(guò)是操縱一個(gè)已有的SQL查詢,執(zhí)行一個(gè)并非開(kāi)發(fā)人員意圖的動(dòng)作。這種動(dòng)作通常是通過(guò)Web應(yīng)用程序的用戶界面完成的。

但這種攻擊是如何進(jìn)行的?它為什么屢屢得逞?

Web應(yīng)用程序和數(shù)據(jù)庫(kù)之間的正常交互

所有的SQL注入漏洞都是由某些未經(jīng)驗(yàn)證的用戶輸入開(kāi)始的。用戶輸入可以采取多種形式,它可以包括一個(gè)攻擊者操縱的由服務(wù)器處理的任何東西,例如:用戶代理、HTTP報(bào)頭、POST參數(shù)、cookies、GET參數(shù),甚至網(wǎng)址標(biāo)頭等。是什么令未經(jīng)驗(yàn)證的用戶輸入如此特殊呢?答案是:應(yīng)用程序并沒(méi)有對(duì)其進(jìn)行充分的檢查,從而不能確保所收到的輸入就是所期望的類型和方式。例如,雖然你的應(yīng)用程序的編制目的是為了接收可以包括字母、數(shù)字的字符串作為用戶名,但此程序并沒(méi)有驗(yàn)證輸入,從而使得黑客可以插入SQL注入的數(shù)據(jù)庫(kù)查詢:

比如,一個(gè)典型的網(wǎng)站會(huì)要求你的用戶名,并希望這個(gè)結(jié)果是“Zhangsan”:

Wangzhan.com/usertetail.asp?username=Zhangsan

在這個(gè)例子中,有可能會(huì)發(fā)生這樣的情況:某個(gè)查詢促使網(wǎng)站在后臺(tái)與數(shù)據(jù)庫(kù)交互,從而獲取關(guān)于用戶(如,Zhangsan)的信息:

SELECT uname,fname,lname,phone,street,city,state,zip FROM users WHERE user =$var_username

當(dāng)Web應(yīng)用程序代碼處理這個(gè)請(qǐng)求時(shí),為了完成查詢,來(lái)自用戶名的值(Zhangsan)被傳遞給$var_username。服務(wù)器應(yīng)當(dāng)將SQL查詢的結(jié)果變成標(biāo)準(zhǔn)格式,并顯示此結(jié)果以便于用戶查看Zhangsan的細(xì)節(jié)。#p#

攻擊者尋找突破口

首先,攻擊者可能查看應(yīng)用程序是否能夠正確地處理錯(cuò)誤條件。有許多方法可以檢查SQL錯(cuò)誤消息,每一個(gè)方法都依賴于數(shù)據(jù)庫(kù)自身。最常見(jiàn)的例子是“‘”( 撇號(hào))。攻擊者可能會(huì)嘗試插入“‘”而不是一個(gè)合法的用戶名:

Wangzhan.com/userdetail.asp?username=‘

如果出現(xiàn)錯(cuò)誤,攻擊者就可以了解一些信息。例如,下面的錯(cuò)誤就會(huì)使攻擊者知道這是一個(gè)MySQL數(shù)據(jù)庫(kù),而且表明數(shù)據(jù)庫(kù)將“‘”解釋為查詢的一部分,從而揭示出這可能是一個(gè)SQL注入點(diǎn),值得進(jìn)一步調(diào)查。

錯(cuò)誤:您的SQL語(yǔ)法有一個(gè)錯(cuò)誤,請(qǐng)檢查您的MySQL服務(wù)器版本對(duì)應(yīng)的手冊(cè),查看正確的語(yǔ)法…在第4行

在此例中,我們使用了一個(gè)“‘”,但任何“保留”字符,即在測(cè)試數(shù)據(jù)庫(kù)錯(cuò)誤時(shí)可以使用的為特別目的而保留的一個(gè)字符。保留字符對(duì)每種數(shù)據(jù)庫(kù)類型來(lái)說(shuō)都是獨(dú)一無(wú)二的。

借助上面顯示的MySQL錯(cuò)誤消息,我們可以看出黑客是多么聰明,而且能夠發(fā)現(xiàn)應(yīng)用程序正在訪問(wèn)的數(shù)據(jù)庫(kù)表的其它細(xì)節(jié)。請(qǐng)看:

Wangzhan.com/userdetail.asp?username=Zhangsan order by 1

如果我們沒(méi)有收到錯(cuò)誤,就可以知道用戶名要么是SQL WHERE語(yǔ)句中的最后一個(gè)變量(允許我們從一個(gè)數(shù)據(jù)庫(kù)表中重新獲取數(shù)據(jù),同時(shí)又排除其它的無(wú)關(guān)數(shù)據(jù)),或者是WHERE語(yǔ)句中的唯一變量。我們可以讓數(shù)字每次增加1,直至收到一個(gè)錯(cuò)誤。例如,可能在到達(dá)“Zhangsan order by 9”,就可以看到:

錯(cuò)誤:用戶警告:“order clause”查詢中有無(wú)法確認(rèn)的列:SELECT

現(xiàn)在可以確認(rèn),直至提交了“9”,我們才收到了錯(cuò)誤消息,所以可以斷定表中有8列。這個(gè)信息很有用,但我們只是想獲得盡量多的數(shù)據(jù)。假設(shè)沒(méi)有提供輸入驗(yàn)證,通過(guò)在用戶名的位置使用一個(gè)通配符,我們實(shí)際上可以返回所有用戶的細(xì)節(jié):

Wangzhan.com/userdetail.asp?username=%

在該例中,我們將執(zhí)行下面的查詢,返回所有用戶的細(xì)節(jié):

SELECT uname,fname,lname,phone,street,city,state,zip FROM users WHERE user = %

如果攻擊使用此伎倆,勢(shì)必會(huì)造成數(shù)據(jù)損害,使大量的有價(jià)值的客戶信息處于風(fēng)險(xiǎn)之中。其中可能包括應(yīng)當(dāng)被加密的用戶口令,當(dāng)然攻擊者可以在日后再進(jìn)行破解。遭到泄露的客戶信息還有可能包括電子郵件地址,攻擊者可以將其用于釣魚攻擊。

其實(shí),我們可以不用插入簡(jiǎn)單的通配符,而是終止查詢,并讓查詢做一些查詢之外的事情:

Wangzhan.com/userdetail.asp?username=zhangsan;DROP users—

為便于比較,我們將SQL Server的數(shù)據(jù)庫(kù)語(yǔ)句列示如下:

SELECT uname,fname,lname,phone,street,city,state,zip FROM users WHERE user = ‘zhangsan’;DROP users—

還要注意,此例允許你在同一行上提交多個(gè)查詢(在此例中,即SELECT和DROP查詢)。其方法就是用分號(hào)(;)分開(kāi)并用兩個(gè)破折號(hào)結(jié)束。因而,在完成最初的查詢后,攻擊者就可以發(fā)送并運(yùn)行自己選擇的一個(gè)完整查詢。#p#

自動(dòng)攻擊

攻擊者可以使用兩種主要的攻擊方法來(lái)利用SQL注入漏洞:自動(dòng)攻擊和手動(dòng)攻擊。從字面上看似乎很容易理解,但這兩種攻擊在機(jī)制上是非常不同的。自動(dòng)攻擊一般是為特定目的而編制的一種工具所導(dǎo)致的結(jié)果。例如,有的攻擊使用大規(guī)模的注入攻擊,其目的是為了讓其攻擊范圍最大化并任意擴(kuò)散其代碼。這種大規(guī)模的攻擊一般針對(duì)非常具體的應(yīng)用程序架構(gòu),如運(yùn)行ASP的IIS服務(wù)器等。而Asprox攻擊,其目的是為了將一個(gè)JavaScript或iframe標(biāo)記注入到網(wǎng)頁(yè)中,從而傳播病毒。

自動(dòng)SQL注入舉例

下面是一個(gè)高級(jí)SQL注入攻擊的例子,它能夠注入到某些字段類型中。很長(zhǎng)一段時(shí)間以來(lái),此類代碼可以有效的幫助攻擊者傳播病毒。

wangzhan.com/ssp.asp?username=zhangsan’;DECLARE @T VARCHAR  (255),@C VARCHAR(255) DECLARE TABLE_CURSOR CURSOR FOR SELECT   A.NAME,B.NAME FROM SYSOBJECTS A,SYSCOLUMNS B WHERE A.ID=B.ID AND   A.XTYPE=‘U’ AND (B.XTYPE=99 OR

B.XTYPE=35 OR B.XTYPE=231 OR B.XTYPE=167) OPEN TABLE_CURSOR FETCH   NEXT

FROM TABLE_CURSOR INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN

EXEC(‘UPDATE [‘+@T+’] SET

[‘+@C+’]=RTRIM(CONVERT(VARCHAR(4000),[‘+@C+’]))+’<script   code>‘) FETCH NEXT FROM TABLE_CURSOR INTO @T,@C END CLOSE   TABLE_CURSOR DEALLOCATE TABLE_CURSOR;--

下面,我們簡(jiǎn)單地看一下這段代碼是如何針對(duì)后端數(shù)據(jù)庫(kù)實(shí)施攻擊的。首先,攻擊者聲明了Table (T) 和 Column (C)這兩個(gè)變量。

DECLARE @T VARCHAR(255),@C VARCHAR(255)

并聲明了一個(gè)可以保存查詢結(jié)果的表cursor:

DECLARE TABLE_CURSOR CURSOR FOR

下面的SELECT語(yǔ)句通過(guò)“text”、“sysname”、“varchar”等列來(lái)檢索所有的用戶對(duì)象,并且將結(jié)果存儲(chǔ)在前面創(chuàng)建的CURSOR中。

SELECT A.NAME,B.NAME FROM SYSOBJECTS A,SYSCOLUMNS B WHERE A.ID=B.ID AND A.XTYPE=‘U’ AND (B.XTYPE=99 OR B.XTYPE=35 OR B.XTYPE=231 OR B.XTYPE=167)

在下面的代碼中,數(shù)據(jù)表CURSOR檢索結(jié)果,并將其分配給表和列變量:

OPEN TABLE_CURSOR FETCH NEXT FROM TABLE_CURSOR INTO @T,@C WHILE(@@FETCH_STATUS=0)

此時(shí),攻擊者已經(jīng)檢索了數(shù)據(jù)庫(kù)中基于文本的這些列,其意圖是為了修改這些列的內(nèi)容。在這里,攻擊者雖然沒(méi)有篡改數(shù)據(jù),但已經(jīng)完成了所有必要的偵察。然后,執(zhí)行更新語(yǔ)句,將JavaScript置于列變量中的每一列中。攻擊完成后,包含Web內(nèi)容(這些內(nèi)容源自數(shù)據(jù)庫(kù)的任何字段)的任何網(wǎng)頁(yè)都會(huì)提交攻擊者的惡意JavaScript代碼。然后,該JavaScript用一個(gè)病毒感染W(wǎng)eb用戶的計(jì)算機(jī):

WHILE(@@FETCH_STATUS=0) BEGIN EXEC(‘UPDATE [‘+@T+’] SET [‘+@C+’]=RTRIM(CONVERT(VARCHAR(4000),[‘+@C+’]))+’<script code>‘) FETCH NEXT FROM TABLE_CURSOR INTO @T,@C END

在注入的結(jié)尾,攻擊者執(zhí)行清理,覆蓋所有的攻擊痕跡:

CLOSE TABLE_CURSOR DEALLOCATE TABLE_CURSOR;--

這些攻擊是完全自動(dòng)化的;黑客攻擊只需使用搜索引擎簡(jiǎn)單地搜索互聯(lián)網(wǎng),查找運(yùn)行經(jīng)典的ASP代碼的Web服務(wù)器即可。別再自欺欺人的相信“我的網(wǎng)站很小,誰(shuí)會(huì)愿意攻擊它呢?”這種愚蠢的謊言。如果你正在通過(guò)互聯(lián)網(wǎng)做商務(wù),不管企業(yè)大小,都易于遭到攻擊。#p#

接管

在很多情況下,攻擊者能夠完全控制SQL服務(wù)器的底層操作系統(tǒng);攻擊者甚至可以接管Web應(yīng)用程序,并最終接管Web服務(wù)器。

接管數(shù)據(jù)庫(kù)服務(wù)器可以導(dǎo)致?lián)p害其它的應(yīng)用程序,甚至損害DMZ中的其它服務(wù)器。現(xiàn)代的Web應(yīng)用程序架構(gòu)一般都有數(shù)據(jù)庫(kù)集群,與其它系統(tǒng)共享數(shù)據(jù)存儲(chǔ),或者位于網(wǎng)絡(luò)中不太安全的地方。如果攻擊者考慮到這個(gè)方面,他就可以使用前面提到的方法繞過(guò)防火墻中一般的IP源過(guò)濾規(guī)則,從而攻擊內(nèi)部網(wǎng)絡(luò),甚至還可以使用SQL服務(wù)器來(lái)存儲(chǔ)病毒、黃色圖片或其它非法內(nèi)容。

此外,通過(guò)首先接管數(shù)據(jù)庫(kù)服務(wù)器,攻擊者可以篡改Web應(yīng)用程序的行為。通常,這種行為包括借助Web服務(wù)器的服務(wù)賬戶在本地服務(wù)器上運(yùn)行命令。如果服務(wù)賬戶有了被提升的特權(quán),攻擊者就可以通過(guò)數(shù)據(jù)庫(kù)服務(wù)器,將命令直接發(fā)送給Web服務(wù)器的操作系統(tǒng)。

有時(shí),數(shù)據(jù)是根據(jù)計(jì)劃例程從DMZ數(shù)據(jù)庫(kù)服務(wù)器析取出來(lái)的。如果通過(guò)公司Intranet(內(nèi)聯(lián)網(wǎng))中的Web接口來(lái)查看數(shù)據(jù),情況就更危險(xiǎn),因?yàn)槎鄶?shù)內(nèi)聯(lián)網(wǎng)的Web應(yīng)用程序在運(yùn)行時(shí),其信任等級(jí)更高。

不要小看盲目攻擊

通常,控制框架會(huì)把SQL錯(cuò)誤搞得不易分辨,如Java或.NET框架。有時(shí),這些錯(cuò)誤是由錯(cuò)誤處理代碼自動(dòng)處理的,或者是由底層的代碼解釋程序處理的。例如,攻擊者可以使用撇號(hào)(‘)而不是合法的輸入:

wangzhan.com/userdetail.asp?username=‘

其結(jié)果為:用戶未找到。

這就告訴我們,Web應(yīng)用程序正在正確地檢查用戶輸入,或者是程序框架正在阻止顯示明顯的錯(cuò)誤消息。在這種情況下,執(zhí)行SQL注入就變得困難了,但并不是不可能。這就引出了下一種攻擊:盲目SQL注入。

盲目SQL注入攻擊是如何工作的呢?它要查看數(shù)據(jù)庫(kù)服務(wù)器是否真正地處理請(qǐng)求,或者查看該請(qǐng)求是否會(huì)觸發(fā)來(lái)自Web服務(wù)器或SQL服務(wù)器的其它響應(yīng)。

例如,我們已經(jīng)看到了能夠向我們提供張三(Zhangsan)用戶細(xì)節(jié)的請(qǐng)求,能夠看出該攻擊是否成功。不過(guò),“WAITFOR DELAY”命令要求SQL服務(wù)器在用查詢結(jié)果響應(yīng)之前,先暫停一分鐘。

wangzhan.com/userdetail.asp?username=zhangsan;WAITFOR DELAY ‘0:1:0’—

如果網(wǎng)站能夠正確地處理用戶輸入,它應(yīng)當(dāng)返回一個(gè)消息,說(shuō)明找不到用戶,或者發(fā)出其它的通知,說(shuō)明“zhangsan;WAITFOR DELAY ‘0:1:0’--”不是一個(gè)合法用戶。

必須指出,只有在將用戶名變量的值被提交給SQL服務(wù)器時(shí),并且Web應(yīng)用程序能夠正確地處理用戶名變量的值時(shí),才會(huì)出現(xiàn)這種情況。

傳統(tǒng)的SQL注入將會(huì)返回錯(cuò)誤,讓用戶知道有關(guān)查詢失敗的原因的細(xì)節(jié)。從本質(zhì)上講,盲目SQL注入依賴的是一種來(lái)自服務(wù)器的布爾邏輯響應(yīng)(是/否,真/假等):查詢請(qǐng)求要么被處理,要么遭遇失敗。盲目SQL注入攻擊一旦得以發(fā)現(xiàn),它就會(huì)提供與典型的SQL注入一樣的功能,但它更難以執(zhí)行,為了獲取信息也需要更多的時(shí)間。#p#

讓盲目攻擊起作用

假設(shè)在示例頁(yè)面中,我們已經(jīng)發(fā)現(xiàn)了盲目注入,我們希望發(fā)現(xiàn)關(guān)于表和數(shù)據(jù)庫(kù)設(shè)計(jì)的細(xì)節(jié)。請(qǐng)看下面的請(qǐng)求:

wangzhan.com/userdetail.asp?username=zhangsan AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtype=0x55),1,1)),0)>65—

如果我們分解一下,會(huì)看出這個(gè)查詢的結(jié)果實(shí)際上是一個(gè)是或否的回答,“這個(gè)表名的第一個(gè)字符是一個(gè)比65大的ASCII值嗎?”先看最里面的查詢:

SELECT TOP 1 name from sysObjects WHERE xtype=0x55

這意味著:獲取來(lái)自sysObjects(所有的表)列表最上面的一個(gè)名字,其xtype(對(duì)象類型)等于ASCII碼0x55(大寫的字母“U”),轉(zhuǎn)換成用戶(user)表。所以,基本而言,我們獲取了用戶在數(shù)據(jù)庫(kù)中所創(chuàng)建的第一個(gè)表。為簡(jiǎn)單起見(jiàn),假設(shè)這個(gè)表就是“users”:

SUBSTRING(users),1,1

現(xiàn)在,我們創(chuàng)建了一個(gè)子串,它包含了表名users的首個(gè)字符。其值為“u”:

ISNULL(ASCII(u),0)>65

在這里我們查看u的ASCII碼值的結(jié)果是否大于65,確認(rèn)表名以字母開(kāi)頭。如果答案是肯定的,查詢就會(huì)被處理。否則,查詢就不會(huì)被處理。

使用這種方法,我們可以對(duì)每個(gè)查詢簡(jiǎn)單地增加數(shù)字,從而發(fā)現(xiàn)首個(gè)用戶名的第一個(gè)字母。例如,假設(shè)我們?cè)诖笥?17時(shí)(>117)得到了一個(gè)否定的響應(yīng),我們知道第一個(gè)字母是字母“u”,因?yàn)?ldquo;u”的ASCII值是117。在發(fā)現(xiàn)這一點(diǎn)之后,我們可以簡(jiǎn)單地改變SUBSTRING參數(shù)來(lái)選擇第二個(gè)字母,然后是第三個(gè)字母,等等。

最后,在沒(méi)有錯(cuò)誤代碼時(shí),我們借助于盲目注入就可以發(fā)現(xiàn)有漏洞的Web應(yīng)用程序的數(shù)據(jù)庫(kù)的完整的表結(jié)構(gòu)。#p#

防御措施:保證應(yīng)用程序編碼的安全

安全的編碼技術(shù)可以清除造成SQL注入攻擊的漏洞。下面說(shuō)的是Web應(yīng)用程序安全編碼的三個(gè)基本方法。

方法一:輸入驗(yàn)證

在Web應(yīng)用程序這一層防止SQL注入最常見(jiàn)的方法是使用輸入驗(yàn)證。無(wú)論是何種語(yǔ)言或平臺(tái),這種方法都很有用。其實(shí)質(zhì)就是在驗(yàn)證用戶輸入的大小和類型前,不對(duì)其采取行動(dòng)。如果你期望用戶輸入的是數(shù)字,就不要接受非數(shù)字的東西。

例如,下面的URL:

wangzhan.com/userdetail.asp?userid=9899

很明顯,在這個(gè)GET請(qǐng)求中,我們期望輸入一個(gè)整數(shù)。一個(gè)簡(jiǎn)單的類型檢查會(huì)告訴我們這是不是一個(gè)合法的字符,從而確保應(yīng)用程序不會(huì)處理非數(shù)字值的輸入。

if (is_numeric($userid)){}

此外,如果用戶的ID總是四個(gè)字符的長(zhǎng)度,我們就可以進(jìn)一步采取措施,除了使用常規(guī)的表達(dá)式來(lái)執(zhí)行整型檢查,還可以強(qiáng)化邊界檢查。

if (preg_match(‘\d{4}’, $string)) {}

在對(duì)待如何驗(yàn)證用戶輸入值的這個(gè)問(wèn)題上,我們僅受到自己創(chuàng)造力的限制。這里的關(guān)鍵是驗(yàn)證由用戶發(fā)送并由系統(tǒng)使用的每一個(gè)值。

執(zhí)行類型檢查的另外一種方法是通過(guò)ASCII字符。用戶名一般是由字母和數(shù)字組成的,所以我們不希望看到類似“@”、“;”之類的字符。因而,我們可以解析用戶名變量,看看是否存在著不屬于48-57,65-90,97-122的任何ASCII字符。在這個(gè)范圍之外的任何ASCII字符對(duì)于用戶名變量來(lái)說(shuō),都是不合法的,應(yīng)當(dāng)拒絕接受。這就是所謂白名單的一個(gè)例子。

知道白名單和黑名單的區(qū)別非常重要。白名單僅接受已知為安全的值或字符,如字母和數(shù)字。而黑名單則會(huì)阻止或不接受已知為惡意的字符。

方法二:規(guī)避技術(shù)

到目前為止,類型檢查和邊界檢查似乎很容易,但并非在檢查所有的數(shù)據(jù)類型時(shí)都會(huì)這么簡(jiǎn)單。許多情況下,我們還會(huì)使用VARCHAR數(shù)據(jù)類型(VARCHAR是一種比CHAR更加靈活的數(shù)據(jù)類型,同樣用于表示字符數(shù)據(jù),但是VARCHAR可以保存可變長(zhǎng)度的字符串。)此類型有可能包含危險(xiǎn)字符。這在備注字段和其它的長(zhǎng)表單文本字段中很常見(jiàn)。

在這種情況下,我們可以利用一種稱為規(guī)避的技術(shù)來(lái)確保變量的內(nèi)容絕對(duì)不會(huì)被解析為SQL語(yǔ)句的一部分。

請(qǐng)看下面這個(gè)例子中的請(qǐng)求:

wangzhan.com/comment.asp?msg=I’m zhangsan.

在這個(gè)例子中,有一個(gè)撇號(hào)(’),這是一種常被認(rèn)為是惡意字符的字符(請(qǐng)參考上一篇文章提到的撇號(hào)),我們并不希望排除它,因?yàn)榇颂幩挠梅ㄊ呛戏ǖ模覀円膊幌M芙^這個(gè)消息。

例如,在PHP中,我們可以使用mysql_real_escape_string函數(shù):

mysql_real_escape_string($GET[‘msg’]);

這就不會(huì)導(dǎo)致安全問(wèn)題,而是安全地解決了撇號(hào)問(wèn)題,使其不能用于任何MySQL查詢中:

msg=“Hello I\’m zhangsan”

同樣地,在微軟的.NET架構(gòu)中,設(shè)計(jì)者常用REPLACE來(lái)保證字符串的安全。在下面的例子中,REPLACE函數(shù)將撇號(hào)(’)放在引號(hào)中,使其成為一種安全字符:

sql = replace(str, “’“, “’“)

方法三:參數(shù)化查詢

防止SQL注入的第三種方法是一種稱為參數(shù)化查詢的技術(shù)。這種方法非常有效,因?yàn)樗梢苑浅?yán)密地控制SQL語(yǔ)句的組成結(jié)構(gòu)。此方法在將對(duì)SQL語(yǔ)句的任何重要變更交給SQL服務(wù)器處理之前就拒絕其操作。

下面的Java例子中,我們簡(jiǎn)單地將參數(shù)添加到已經(jīng)構(gòu)建的靜態(tài)查詢中。首先,我們使用問(wèn)號(hào)作為變量建立了真實(shí)的SELECT語(yǔ)句:

String query = “SELECT account_balance FROM user_data WHERE user_name = ? “;

下一步,我們調(diào)用prepareStatement函數(shù):

PreparedStatement pstmt = connection.prepareStatement( query );

然后,在查詢中我們將字符串“custname”指派給變量:

pstmt.setString( 1, custname);

最后,我們執(zhí)行查詢,并將結(jié)果存儲(chǔ)在一個(gè)變量中:

ResultSet results = pstmt.executeQuery( );

通過(guò)使用這種方法,我們能夠確保在附加的惡意查詢或參數(shù)被發(fā)送給數(shù)據(jù)庫(kù)之前,不會(huì)被添加到查詢中。注意,應(yīng)當(dāng)像前面所討論的那樣來(lái)驗(yàn)證“custname”變量,因?yàn)樗遣皇苄湃蔚挠脩糨斎搿?/p>

【編輯推薦】

  1. 名為L(zhǎng)izaMoon的SQL注入攻擊正在席卷全球
  2. SQL注入攻擊三部曲之入門篇
  3. SQL注入攻擊三部曲之進(jìn)階篇
  4. SQL注入攻擊三部曲之高級(jí)篇
責(zé)任編輯:于爽 來(lái)源: TechTarget中國(guó)
相關(guān)推薦

2009-10-22 11:03:20

OSGi Web應(yīng)用程

2022-02-23 15:33:19

前端框架開(kāi)發(fā)Web

2024-08-19 08:54:02

2009-04-01 14:33:33

2009-07-09 16:47:26

Servlet的Web

2010-09-03 15:17:29

2011-08-10 10:25:42

iPhoneAndroid應(yīng)用安全

2010-11-11 09:15:08

Web應(yīng)用程序

2009-02-27 17:00:25

2012-04-19 09:34:21

ibmdw

2009-01-16 09:22:40

Web應(yīng)用程序Web程序管理Web服務(wù)

2021-11-08 16:18:20

網(wǎng)絡(luò)犯罪Deepfakes網(wǎng)絡(luò)攻擊

2012-04-25 22:56:10

Android

2011-11-15 10:28:37

2012-05-29 09:21:21

API

2021-04-08 08:06:55

SAP應(yīng)用程序攻擊

2010-05-20 09:48:36

2011-03-22 14:12:17

LAMP

2015-02-02 15:46:59

Web應(yīng)用架構(gòu)大數(shù)據(jù)

2012-05-14 17:35:28

移動(dòng)Web
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美精品丝袜中出| 中文子幕无线码一区tr| 国外成人在线视频| www.免费av| 国精产品一区一区三区四川| 亚洲色图另类专区| 精品高清视频| 在线免费av网| 黄色另类av| 中文字幕9999| 一级黄色电影片| 成人自拍av| 夜夜嗨av一区二区三区中文字幕| 久久久久久欧美精品色一二三四| 在线播放成人av| 99亚洲伊人久久精品影院红桃| 国产亚洲xxx| 老熟女高潮一区二区三区| 久久uomeier| 一区二区三区精品视频| 日韩精品大片| 开心激情综合网| 日韩不卡免费视频| 国内精品400部情侣激情| 69xxx免费| 日韩三级视频| 欧美成人a在线| 99热这里只有精品在线播放| free性m.freesex欧美| 中文字幕精品三区| 麻豆精品蜜桃一区二区三区| 99久久久久久久| 日本中文一区二区三区| 97精品欧美一区二区三区| 2025国产精品自拍| 九九综合在线| 日韩精品欧美国产精品忘忧草| 日本wwwxx| www.久久爱.com| 欧美唯美清纯偷拍| 欧美牲交a欧美牲交aⅴ免费真| 超碰在线网址| 成人免费视频在线观看| 日韩精品一区二区三区四区五区| 天天干天天色天天| 国产成人精品免费| 91久久国产综合久久蜜月精品| 亚洲婷婷久久综合| 久久最新视频| 欧美在线亚洲一区| 欧美成人aaaaⅴ片在线看| 欧美在线免费一级片| 久久精品精品电影网| 欧美另类69xxxx| 成人3d精品动漫精品一二三| 亚洲色图25p| 成人免费毛片糖心| 伊甸园亚洲一区| 亚洲精品一区av在线播放| 国产一级伦理片| 欧美aaaaaaaa牛牛影院| 亚洲精品第一页| 一起草在线视频| 色88888久久久久久影院| 亚洲精品国产电影| 法国伦理少妇愉情| 国产精品视频一区二区三区四蜜臂| 亚洲精品ady| 久久亚洲AV成人无码国产野外| 欧美人妖在线观看| 精品视频久久久久久| 男人天堂av电影| 欧美伦理在线视频| 久久精品国产久精国产思思| 我要看黄色一级片| 亚洲欧美网站在线观看| 久久99精品国产99久久6尤物 | 精品视频一区二区三区| 91精品国产综合久久久蜜臀图片| 国产在线观看中文字幕| 亚洲精品a区| 日韩av中文字幕在线免费观看| 成人免费av片| 日韩成人a**站| 久久中文精品视频| 日本高清www免费视频| 久久人人超碰| 91精品国产综合久久久久久久久| www.av黄色| 99re视频这里只有精品| 日韩精品久久久免费观看| 中文字幕有码在线观看| 精品高清一区二区三区| 亚洲天堂av线| 视频在线亚洲| 亚洲男人的天堂在线| 日韩一区二区三区四区视频| 欧美深夜福利| 国产精品v片在线观看不卡| 国产精品午夜福利| 99视频超级精品| 一区二区三区四区欧美日韩| 国产第一页在线视频| 在线观看国产91| 日本女人性视频| 国产免费久久| 欧美激情中文网| 嫩草影院一区二区三区| 国产91精品一区二区麻豆网站 | 亚洲va国产天堂va久久en| 激情五月开心婷婷| 日韩中文一区二区| 在线日韩欧美视频| 精品在线视频观看| 麻豆91精品视频| 久久国产精品一区二区三区| 超碰在线观看免费| 欧美午夜一区二区三区免费大片| 永久免费未满蜜桃| 色小子综合网| 日本一欧美一欧美一亚洲视频| 国产肥老妇视频| 欧美激情综合在线| 精品国产免费av| 91成人入口| 少妇av一区二区三区| 五月天综合激情| 国产成人精品综合在线观看 | 一本一道久久a久久精品蜜桃| 欧美一区二区三区四区在线| 亚洲第一页视频| 成人欧美一区二区三区1314| 黄色在线视频网| 一本久久青青| 久久人人爽人人爽人人片av高清| 国产婷婷在线视频| 国产精品不卡在线| 亚洲黄色小视频在线观看| 久久最新网址| 欧美在线激情视频| 欧日韩在线视频| 一区二区高清在线| 中文字幕乱码在线人视频| 国产高清一区| 91情侣偷在线精品国产| 一广人看www在线观看免费视频| 色哦色哦哦色天天综合| 亚洲乱码国产乱码精品精大量| 亚洲高清av| 久久草.com| 日韩电影毛片| 精品视频久久久久久久| 亚洲久久在线观看| 久久久一区二区三区捆绑**| 免费看国产曰批40分钟| 日本亚洲不卡| 日本免费久久高清视频| 精品欧美不卡一区二区在线观看| 一本一道久久a久久精品| www.久久国产| 久久久夜夜夜| 亚洲 国产 欧美一区| 国产成人a视频高清在线观看| 伊人伊成久久人综合网站| 中文字幕精品一区二| 国产精品对白交换视频| 国产女同无遮挡互慰高潮91| 婷婷久久一区| 高清视频一区| 欧美freesex黑人又粗又大| 亚洲欧美日韩网| 中文文字幕一区二区三三| 中文字幕日韩av资源站| 成年人性生活视频| 一区二区国产在线观看| 欧美亚洲国产免费| 偷拍与自拍一区| 中文字幕成人一区| 蜜桃精品视频| 久久久久久国产精品美女| 亚洲精品久久久蜜桃动漫| 亚洲成人av一区二区三区| 免费成人深夜夜行p站| 老色鬼久久亚洲一区二区| 亚洲欧洲免费无码| 亚洲精品a区| 日本精品免费一区二区三区| 亚洲成人三级| 日韩你懂的电影在线观看| 日韩精品久久久久久久酒店| 久久久久久免费网| 亚洲精品mv在线观看| 亚洲第一毛片| 亚洲欧美国产一区二区| 一区二区三区亚洲变态调教大结局| 欧美亚洲国产日本| 日本在线免费看| 精品国产91洋老外米糕| 波多野结衣在线电影| 亚洲精品国久久99热| 中文字幕av观看| 国产一区二区h| 青青草原成人网| 亚洲国产精品日韩专区av有中文| 久久久久久九九| 91麻豆精品| 热99在线视频| 任你弄在线视频免费观看| 亚洲色图50p| 免费看日韩av| 欧美精品vⅰdeose4hd| 日韩精品一区二区av| 18欧美乱大交hd1984| 91精品人妻一区二区三区蜜桃欧美| 激情深爱一区二区| 欧美一级黄色片视频| 欧美视频久久| 中文字幕剧情在线观看一区| 国产高清免费av在线| 日韩精品亚洲专区| 日本福利一区二区三区| av毛片精品| 成人h视频在线观看播放| 天堂资源在线| 久久久久久久国产| 老司机午夜在线视频| 亚洲天堂av网| 天天干天天做天天操| 日韩欧美色综合网站| 中文字幕日本人妻久久久免费 | 国产精品一区在线观看你懂的| 蜜臀av午夜一区二区三区| 亚洲国产网站| 免费cad大片在线观看| 久久亚洲成人| 色中色综合成人| 国产不卡一二三区| 久久精品国产综合精品| julia中文字幕一区二区99在线| 国产在线久久久| 日本综合视频| 国产a∨精品一区二区三区不卡| 毛片在线网站| 97超碰国产精品女人人人爽| 久久国产精品黑丝| 精品少妇一区二区30p| 黄色在线免费网站| 精品国产一区久久久| 69av亚洲| 久久精品中文字幕一区| 日本电影全部在线观看网站视频| 亚洲日韩欧美视频一区| 欧美日韩国产综合视频| 亚洲欧美日韩一区在线| 内衣办公室在线| 亚洲天堂免费在线| 成人亚洲性情网站www在线观看| 亚洲女同性videos| 国产在线观看精品一区| 亚洲天堂免费视频| 国产理论电影在线观看| 中文字幕日韩精品在线观看| 成年人免费在线视频| 一区二区三区精品99久久| 成人资源www网在线最新版| 中文日韩在线观看| 国产原创精品视频| 久久999免费视频| 交100部在线观看| 日韩av免费在线看| 日韩免费小视频| 国产中文欧美精品| 亚洲啊v在线免费视频| 成人在线看片| 网友自拍一区| 五码日韩精品一区二区三区视频| 青青草原综合久久大伊人精品| 亚洲永久一区二区三区在线| 亚洲精品一区二区在线看| 无颜之月在线看| 亚洲欧美久久| 在线观看av网页| 国产精品一级二级三级| 国产十八熟妇av成人一区| 久久久久99精品国产片| 成人无码精品1区2区3区免费看| 亚洲激情第一区| 一级片免费网址| 欧美性做爰猛烈叫床潮| av观看在线免费| 亚洲精品少妇网址| 亚洲搞黄视频| …久久精品99久久香蕉国产| 日韩欧美一区二区三区免费观看 | 九色porny91| 激情欧美日韩一区二区| av黄色一级片| 国产精品久久久久一区二区三区 | 精品少妇人妻av一区二区三区| 久久亚洲一区二区三区四区| 久久噜噜色综合一区二区| 亚洲成av人片观看| 一二三四区在线| 亚洲精品国偷自产在线99热| 日本免费视频在线观看| 97国产suv精品一区二区62| 国产精品久久久久久吹潮| 国产精品一区二| 亚洲成人国产| 丁香婷婷激情网| 成人精品视频一区二区三区| xxxxx99| 五月天激情综合| a天堂中文在线观看| 国产亚洲欧美视频| sm久久捆绑调教精品一区| 国产精品综合不卡av| 日韩美女毛片| 99色这里只有精品| 国内精品伊人久久久久影院对白| 日本黄色网址大全| 亚洲一区二区三区在线看| 91激情在线观看| 亚洲天堂影视av| 91av亚洲| 国产一区在线免费| 国内精品久久久久国产盗摄免费观看完整版| 免费在线观看的av网站| 成人av电影在线网| 久久久久久久极品内射| 91精品一区二区三区在线观看| 国产午夜在线观看| 日韩免费观看在线观看| 亚洲成aⅴ人片久久青草影院| 精品国产一区二区三区无码| 国产综合久久久久影院| 精品人体无码一区二区三区| 日本高清成人免费播放| 日本天堂在线| 欧美一区亚洲一区| 欧洲亚洲成人| 激情五月宗合网| 成人国产电影网| 国语对白一区二区| 欧美精品一区二区三区蜜臀| 精品精品导航| 国产九区一区在线| 亚洲日本免费| 国模私拍在线观看| 亚洲成人精品一区| 人妻一区二区三区四区| 久久免费高清视频| 久久精品色综合| 欧美男女爱爱视频| av中文字幕一区| 日韩特级黄色片| 亚洲网站在线观看| 欧洲精品一区二区三区| 欧美日韩一区二区视频在线| 美女被久久久| 自拍偷拍视频亚洲| 欧美亚洲动漫制服丝袜| 午夜伦理在线| 91亚洲午夜在线| 国产综合色产| 国产三级国产精品| 一本大道久久a久久综合| yw193.com尤物在线| 国产精品专区一| 欧美日韩国产免费观看| 国产大学生视频| 日韩欧美在线播放| 日本在线观看网站| 亚洲最大福利视频网| 亚洲精选久久| 亚洲最大成人综合网| 91精品国产手机| 丰满大乳少妇在线观看网站| 久中文字幕一区| 日韩av电影天堂| 欧美国产日韩综合| 精品一区二区三区三区| 欧美91在线|欧美| 妺妺窝人体色www看人体| 久久免费精品国产久精品久久久久 | 五月婷婷六月激情| 国产精品扒开腿做爽爽爽男男| 香蕉av一区二区| 亚洲av成人片色在线观看高潮| 91久久一区二区| 18网站在线观看| 免费成人av网站| 国内国产精品久久| 久久不卡免费视频| 视频直播国产精品| 林ゆな中文字幕一区二区| 乌克兰美女av| 亚洲mv在线观看| 欧美性天天影视| 久久另类ts人妖一区二区|