真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么解決nosql注入,如何解決sql注入問題

什么是sql注入如何防止sql注入

SQL注入是一種非常常見的數(shù)據(jù)庫(kù)攻擊手段,同時(shí)也是網(wǎng)絡(luò)世界中最普遍的漏洞之一,簡(jiǎn)單理解就是惡意用戶通過在表單中填寫包含SQL關(guān)鍵字的數(shù)據(jù)來使數(shù)據(jù)庫(kù)執(zhí)行非常規(guī)代碼的過程。

我們提供的服務(wù)有:做網(wǎng)站、成都網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、潤(rùn)州ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的潤(rùn)州網(wǎng)站制作公司

問題來源是,SQL數(shù)據(jù)庫(kù)的操作是通過SQL語(yǔ)句來執(zhí)行的,而無論是執(zhí)行代碼還是數(shù)據(jù)項(xiàng)都必須寫在SQL語(yǔ)句中,也就導(dǎo)致如果我們?cè)跀?shù)據(jù)項(xiàng)中加入了某些SQL語(yǔ)句關(guān)鍵字,比如SELECT、DROP等,這些關(guān)鍵字就很有可能在數(shù)據(jù)庫(kù)寫入或讀取數(shù)據(jù)時(shí)得到執(zhí)行。

解決方案

方案一:

采用預(yù)編譯技術(shù)

使用預(yù)編譯的SQL語(yǔ)句,SQL語(yǔ)句的語(yǔ)義不會(huì)是不會(huì)發(fā)生改變的。預(yù)編譯語(yǔ)句在創(chuàng)建的時(shí)候就已經(jīng)將指定的SQL語(yǔ)句發(fā)送給了DBMS,完成了解析,檢查,編譯等工作,所以攻擊者無法改變SQL語(yǔ)句的結(jié)構(gòu),只是把值賦給?,然后將?這個(gè)變量傳給SQL語(yǔ)句。當(dāng)然還有一些通過預(yù)編譯繞過某些安全防護(hù)的操作,大家感興趣可以去搜索一下。

方案二:

嚴(yán)格控制數(shù)據(jù)類型

在java、c等強(qiáng)類型語(yǔ)言中一般是不存在數(shù)字型注入的,因?yàn)樵诮邮艿接脩糨斎雐d時(shí),代碼一般會(huì)做一個(gè)int id 的數(shù)據(jù)類型轉(zhuǎn)換,假如我們輸入的是字符串的話,那么這種情況下,程序就會(huì)報(bào)錯(cuò)。但是在PHP、ASP這些沒有強(qiáng)調(diào)處理數(shù)據(jù)類型的語(yǔ)言,一般我們看到的接收id的代碼都是如下等代碼。

方案三:

對(duì)特殊的字符進(jìn)行轉(zhuǎn)義

數(shù)字型注入可以通過檢查數(shù)據(jù)類型防止,但是字符型不可以,那么怎么辦呢,最好的辦法就是對(duì)特殊的字符進(jìn)行轉(zhuǎn)義了。比如在MySQL中我們可以對(duì)" '

"進(jìn)行轉(zhuǎn)義,這樣就防止了一些惡意攻擊者來閉合語(yǔ)句。當(dāng)然我們也可以通過一些安全函數(shù)來轉(zhuǎn)義特殊字符。如addslashes()等,但是這些函數(shù)并非一勞永逸,攻擊者還可以通過一些特殊的方式繞過。

如何從根本上防止 SQL 注入

SQL注入并不是一個(gè)在SQL內(nèi)不可解決的問題,這種攻擊方式的存在也不能完全歸咎于SQL這種語(yǔ)言,因?yàn)樽⑷氲膯栴}而放棄SQL這種方式也是因噎廢食。首先先說一個(gè)我在其他回答中也曾提到過的觀點(diǎn):沒有(運(yùn)行時(shí))編譯,就沒有注入。

SQL注入產(chǎn)生的原因,和棧溢出、XSS等很多其他的攻擊方法類似,就是未經(jīng)檢查或者未經(jīng)充分檢查的用戶輸入數(shù)據(jù),意外變成了代碼被執(zhí)行。針對(duì)于SQL注入,則是用戶提交的數(shù)據(jù),被數(shù)據(jù)庫(kù)系統(tǒng)編譯而產(chǎn)生了開發(fā)者預(yù)期之外的動(dòng)作。也就是,SQL注入是用戶輸入的數(shù)據(jù),在拼接SQL語(yǔ)句的過程中,超越了數(shù)據(jù)本身,成為了SQL語(yǔ)句查詢邏輯的一部分,然后這樣被拼接出來的SQL語(yǔ)句被數(shù)據(jù)庫(kù)執(zhí)行,產(chǎn)生了開發(fā)者預(yù)期之外的動(dòng)作。

所以從根本上防止上述類型攻擊的手段,還是避免數(shù)據(jù)變成代碼被執(zhí)行,時(shí)刻分清代碼和數(shù)據(jù)的界限。而具體到SQL注入來說,被執(zhí)行的惡意代碼是通過數(shù)據(jù)庫(kù)的SQL解釋引擎編譯得到的,所以只要避免用戶輸入的數(shù)據(jù)被數(shù)據(jù)庫(kù)系統(tǒng)編譯就可以了。

現(xiàn)在的數(shù)據(jù)庫(kù)系統(tǒng)都提供SQL語(yǔ)句的預(yù)編譯(prepare)和查詢參數(shù)綁定功能,在SQL語(yǔ)句中放置占位符'?',然后將帶有占位符的SQL語(yǔ)句傳給數(shù)據(jù)庫(kù)編譯,執(zhí)行的時(shí)候才將用戶輸入的數(shù)據(jù)作為執(zhí)行的參數(shù)傳給用戶。這樣的操作不僅使得SQL語(yǔ)句在書寫的時(shí)候不再需要拼接,看起來也更直接,而且用戶輸入的數(shù)據(jù)也沒有機(jī)會(huì)被送到數(shù)據(jù)庫(kù)的SQL解釋器被編譯執(zhí)行,也不會(huì)越權(quán)變成代碼。

至于為什么這種參數(shù)化的查詢方式?jīng)]有作為默認(rèn)的使用方式,我想除了兼容老系統(tǒng)以外,直接使用SQL確實(shí)方便并且也有確定的使用場(chǎng)合。

多說一點(diǎn),從代碼的角度來看,拼接SQL語(yǔ)句的做法也是不恰當(dāng)?shù)摹?/p>

解決并清除SQL被注入

在SQL查詢分析器執(zhí)行以下代碼就可以了。

declare

@t

varchar(255),@c

varchar(255)

declare

table_cursor

cursor

for

select

a.name,b.name

from

sysobjects

a,syscolumns

b

,systypes

c

where

a.id=b.id

and

a.xtype='u'

and

c.name

in

('char',

'nchar',

'nvarchar',

'varchar','text','ntext')

declare

@str

varchar(500),@str2

varchar(500)

set

@str='script

src=;/script'/*要替換的內(nèi)容*/

set

@str2=''

open

table_cursor

fetch

next

from

table_cursor

into

@t,@c

while(@@fetch_status=0)

begin

exec('update

['

+

@t

+

']

set

['

+

@c

+

']=replace(cast(['

+

@c

+

']

as

varchar(8000)),'''+@str+''','''+

@str2

+''')')

fetch

next

from

table_cursor

into

@t,@c

end

close

table_cursor

deallocate

table_cursor;

首先替換代碼里面的script

src=;/script為你的數(shù)據(jù)庫(kù)表里面被注入的內(nèi)容,打開MSSQL的SQL查詢分析器執(zhí)行以下代碼就可以了。


本文題目:怎么解決nosql注入,如何解決sql注入問題
當(dāng)前URL:http://weahome.cn/article/dsejepp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部