日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何全面防御SQL注入攻擊

隨著技術(shù)的進(jìn)步,Web應(yīng)用技術(shù)在得以快速發(fā)展的同時(shí),其自身的漏洞和伴隨的風(fēng)險(xiǎn)也在不斷迭代與增加著。自2003年以來(lái),SQL注入攻擊已持續(xù)位列OWASP應(yīng)用安全風(fēng)險(xiǎn)Top 10之中,并值得各類(lèi)公司持續(xù)予以嚴(yán)防死守。在本文中,我們根據(jù)如下的議題,來(lái)深入探討SQL注入攻擊的特點(diǎn),及其防御方法。具體議題如下:

創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、阿勒泰網(wǎng)絡(luò)推廣、小程序制作、阿勒泰網(wǎng)絡(luò)營(yíng)銷(xiāo)、阿勒泰企業(yè)策劃、阿勒泰品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供阿勒泰建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):13518219792,官方網(wǎng)址:www.cdcxhl.com

  • 什么是SQL注入攻擊?
  • SQL注入有何危害?
  • SQL注入攻擊如何運(yùn)作的?
  • SQL注入攻擊有哪些不同類(lèi)型?
  • 如何防御SQL注入攻擊?

您可以訪(fǎng)問(wèn)網(wǎng)絡(luò)安全視頻講座-- https://youtu.be/gfFKuiZ9Y7s,以觀看培訓(xùn)專(zhuān)家對(duì)每個(gè)技術(shù)細(xì)節(jié)的討論。

一、什么是SQL注入攻擊?

SQL注入(SQL injection,SQLi)攻擊是指:攻擊者通過(guò)執(zhí)行惡意SQL語(yǔ)句,來(lái)控制某個(gè)Web應(yīng)用的數(shù)據(jù)庫(kù)服務(wù)器,進(jìn)而未經(jīng)授權(quán)地訪(fǎng)問(wèn)、修改或刪除各種數(shù)據(jù)。

在互聯(lián)網(wǎng)發(fā)展的早期,構(gòu)建網(wǎng)站曾是一個(gè)非常簡(jiǎn)單的過(guò)程:既沒(méi)有JavaScript,又沒(méi)有CSS,且少有圖像。但是,隨著各類(lèi)網(wǎng)站的普及,人們對(duì)于先進(jìn)技術(shù)和動(dòng)態(tài)網(wǎng)站的需求也在不斷增長(zhǎng)。這就導(dǎo)致了JSP和PHP等服務(wù)器端腳本語(yǔ)言的不斷發(fā)展。

同時(shí),各類(lèi)網(wǎng)站也開(kāi)始在數(shù)據(jù)庫(kù)中存儲(chǔ)豐富的用戶(hù)輸入內(nèi)容。如今,MySQL已經(jīng)成為了訪(fǎng)問(wèn)和操作數(shù)據(jù)庫(kù)的最流行、且標(biāo)準(zhǔn)化的應(yīng)用。不過(guò),黑客當(dāng)然也找到了利用SQL技術(shù)漏洞的新方法,SQL注入攻擊就是最常用的數(shù)據(jù)庫(kù)入侵方式之一。黑客使用定制化的SQL語(yǔ)句來(lái)入侵?jǐn)?shù)據(jù)庫(kù),以欺騙系統(tǒng)執(zhí)行各種異常的、且不應(yīng)該的操作。

二、SQL注入攻擊有何危害?

在易受攻擊的網(wǎng)站上,攻擊者可以利用SQL注入實(shí)現(xiàn)許多操作與目的。可以說(shuō),只要客觀條件滿(mǎn)足,攻擊者就能夠執(zhí)行如下各項(xiàng)操作:

  • 繞過(guò)Web應(yīng)用的授權(quán)機(jī)制,以提取敏感信息。
  • 基于數(shù)據(jù)庫(kù)中不同數(shù)據(jù),輕松地控制應(yīng)用程序的各種行為。
  • 伴隨著用戶(hù)訪(fǎng)問(wèn)應(yīng)用的過(guò)程,注入更多需要執(zhí)行的惡意代碼。
  • 添加、修改和刪除數(shù)據(jù),破壞數(shù)據(jù)庫(kù),以及迫使應(yīng)用的服務(wù)不可用。
  • 在某個(gè)網(wǎng)站上,通過(guò)枚舉以獲取已注冊(cè)用戶(hù)的詳細(xì)身份信息,并將其用于攻擊其他站點(diǎn)。

雖然上述一切都取決于攻擊者的技巧與能力,但不可否認(rèn)的是,有時(shí)候SQL注入在整個(gè)攻擊過(guò)程中,對(duì)他們能夠成功并完全地接管數(shù)據(jù)庫(kù)和Web應(yīng)用起到了關(guān)鍵性的作用。下面我們來(lái)深入了解此類(lèi)攻擊是如何實(shí)現(xiàn)的。

三、SQL注入攻擊如何運(yùn)作的?

開(kāi)發(fā)人員通過(guò)定義某種SQL查詢(xún),在對(duì)應(yīng)的應(yīng)用程序運(yùn)行過(guò)程中,讓數(shù)據(jù)庫(kù)執(zhí)行一系列操作。此類(lèi)查詢(xún)通常帶有一到兩個(gè)參數(shù),以便根據(jù)用戶(hù)所提供的合適參數(shù)值,返回預(yù)期的查詢(xún)記錄。

不過(guò),SQL注入攻擊會(huì)在如下兩個(gè)階段發(fā)生:

  • 研究 - 攻擊者提供一些隨機(jī)的異常參數(shù)值,以觀察應(yīng)用程序?qū)⑷绾巫龀鲰憫?yīng),進(jìn)而決定進(jìn)行何種攻擊嘗試。
  • 攻擊 - 在此,攻擊者會(huì)提供精心設(shè)計(jì)的參數(shù)值。應(yīng)用程序?qū)⒔馕稣麠lSQL命令,而不僅僅是數(shù)據(jù)。然后,數(shù)據(jù)庫(kù)會(huì)按照攻擊者所修改意圖,來(lái)執(zhí)行該SQL命令。

讓我們來(lái)觀察一下如下示例。在登錄表單的過(guò)程中,網(wǎng)站用戶(hù)可以更改下面語(yǔ)句中的$user和$password參數(shù)值:

 
 
 
 
  1. $statement = "SELECT * FROM users WHERE username ='$user' AND password '$password'";  

在服務(wù)器端,這一特定的SQL語(yǔ)句會(huì)被傳遞給相應(yīng)的函數(shù),而那個(gè)函數(shù)又將該字符串發(fā)送給已連接的數(shù)據(jù)庫(kù)。接著,該數(shù)據(jù)庫(kù)對(duì)其進(jìn)行解析、執(zhí)行并返回相應(yīng)的結(jié)果。

 
 
 
 
  1. #Define POST variables 
  2. uname = request.POST['username'] 
  3. passwd = request.POST['password'] 
  4. #SQL query vulnerable to SQLi 
  5. sql = "SELECT id FROM users WHERE username='" + uname + "' AND password='" + passwd + "'" 
  6. #Execute the SQL statement  
  7. database.execute(sql) 

那么,如果用戶(hù)的輸入沒(méi)有得到應(yīng)用程序的適當(dāng)“消毒”,攻擊者則可以輕松地植入精心設(shè)計(jì)的參數(shù)值。例如下面這條輸入語(yǔ)句:

 
 
 
 
  1. $statement = "SELECT * FROM users WHERE username ='Dean' OR '1'='1'-- ' AND password = 'WinchesterS'";  

深入分析上述語(yǔ)句,我們可以注意到它包含的兩個(gè)特殊部分:

  • OR'1'='1' - 是一個(gè)永遠(yuǎn)為真的條件,因此它會(huì)被應(yīng)用程序無(wú)條件地接受為有效的輸入。
  • --(雙連字符) - 是告訴SQL解析器:該行的其余部分為注釋?zhuān)槐貓?zhí)行。

因此,一旦該查詢(xún)被執(zhí)行之后,SQL注入就能夠有效地跳過(guò)密碼驗(yàn)證,進(jìn)而導(dǎo)致身份驗(yàn)證環(huán)節(jié)的缺失。而且,憑借著此類(lèi)查詢(xún)的記錄,攻擊者能夠很容易地使用獲取到的第一手?jǐn)?shù)據(jù)庫(kù)帳戶(hù),即管理員用戶(hù)的信息,進(jìn)而成功地登錄到對(duì)應(yīng)的應(yīng)用程序之中。

值得注意的是,上面只是通過(guò)SQL的查詢(xún),以非正式的方式獲取必要的信息。而實(shí)際上,SQL注入攻擊還有許多種類(lèi)型。

四、SQL注入攻擊有哪些不同類(lèi)型?

正所謂“條條道路通羅馬”。下面我們來(lái)看看攻擊者可以使用哪些類(lèi)型的SQL注入漏洞,從服務(wù)器上提取數(shù)據(jù)。一般而言,SQL注入可分為如下種類(lèi):

1. 帶內(nèi)(In-Band)SQL注入

此類(lèi)是最常見(jiàn)的SQL注入攻擊。它通常發(fā)生在攻擊者能夠使用相同的通信信道,來(lái)發(fā)起攻擊和收集各種結(jié)果。因此,最為常見(jiàn)的帶內(nèi)SQL注入類(lèi)型分別是:

  • 基于錯(cuò)誤的(Error-based)SQL注入 - 這種技術(shù)是根據(jù)數(shù)據(jù)庫(kù)服務(wù)器所拋出的錯(cuò)誤異常消息,來(lái)獲取有關(guān)數(shù)據(jù)庫(kù)結(jié)構(gòu)方面的信息。有時(shí)候,這種簡(jiǎn)單的攻擊方式足以讓攻擊者通過(guò)枚舉的手段獲悉整個(gè)數(shù)據(jù)庫(kù)。
  • 基于聯(lián)合的(Union-based)SQL注入 – 這種技術(shù)是利用UNION SQL操作符將兩到多個(gè)SELECT語(yǔ)句的結(jié)果合并為一個(gè),然后作為HTTP響應(yīng)的一部分予以返回。

在上述兩種注入類(lèi)型中,各種數(shù)據(jù)實(shí)際上并未通過(guò)Web應(yīng)用程序進(jìn)行傳輸。因此,攻擊者也就無(wú)法直觀地看到攻擊的結(jié)果。下面,攻擊者可以通過(guò)發(fā)送有效的負(fù)載,并觀察Web應(yīng)用的響應(yīng),以及數(shù)據(jù)庫(kù)服務(wù)器的結(jié)果行為,來(lái)對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)進(jìn)行重建。因此,我們稱(chēng)如下兩種SQL注入為推理類(lèi)型:

  • 基于布爾的(Boolean-based)SQL注入 – 這種技術(shù)根據(jù)查詢(xún)的返回結(jié)果是TRUE還是FALSE,來(lái)產(chǎn)生不同的結(jié)果。也就是說(shuō),根據(jù)結(jié)果的真?zhèn)??,以決定HTTP響應(yīng)中的內(nèi)容是要被更改,還是保持不變。
  • 基于時(shí)間的(Time-based)SQL注入 - 這種技術(shù)是在向數(shù)據(jù)庫(kù)發(fā)送SQL查詢(xún)的過(guò)程中,強(qiáng)制在數(shù)據(jù)庫(kù)響應(yīng)之前等待指定的時(shí)長(zhǎng)(以秒為單位)。也就是說(shuō),某個(gè)網(wǎng)站的響應(yīng)耗時(shí),將能夠向攻擊者表明其查詢(xún)結(jié)果是TRUE還是FALSE。

2. 帶外(Out-of-Band)SQL注入

此類(lèi)SQL注入攻擊的特點(diǎn)是:不但最不常見(jiàn),而且通常也是最難以被執(zhí)行。它們通常涉及到,將各種數(shù)據(jù)直接從數(shù)據(jù)庫(kù)服務(wù)器發(fā)送到由攻擊者所控制的計(jì)算機(jī)上。從某種程度上說(shuō),帶外技術(shù)為攻擊者提供了SQL帶內(nèi)或盲注式攻擊的替代方法,其主要針對(duì)的是服務(wù)器響應(yīng)并不十分穩(wěn)定的情況。

可見(jiàn),服務(wù)端腳本(server-scripting)語(yǔ)言并不能夠確定SQL查詢(xún)字符串是否存在著格式錯(cuò)誤。他們所能做的只是將某個(gè)字符串發(fā)送到數(shù)據(jù)庫(kù)服務(wù)器上,并等待解析的完成與響應(yīng)。不過(guò)話(huà)說(shuō)回來(lái),我們總能找到各種辦法來(lái)對(duì)用戶(hù)的輸入進(jìn)行“消毒”,并確保SQL注入攻擊無(wú)法得逞。

五、如何防御SQL注入攻擊?

現(xiàn)如今,我們有許多種簡(jiǎn)單的方法,以避免網(wǎng)站陷入SQL注入攻擊,并抑制它們可能造成的危害。下面,我們僅列舉其中的一小部分:

  • 通過(guò)使用靜態(tài)和動(dòng)態(tài)測(cè)試,定期檢查并發(fā)現(xiàn)應(yīng)用程序中的SQL注入漏洞。
  • 通過(guò)使用參數(shù)化查詢(xún)和對(duì)象關(guān)系映射(Object Relational Mappers,ORM),來(lái)避免和修復(fù)注入漏洞。此類(lèi)查詢(xún)通過(guò)指定參數(shù)的占位符,以便數(shù)據(jù)庫(kù)始終將它們視為數(shù)據(jù),而非SQL命令的一部分。
  • 使用轉(zhuǎn)義字符,來(lái)修復(fù)SQL注入漏洞,以便忽略掉一些特殊字符。
  • 通過(guò)對(duì)數(shù)據(jù)庫(kù)強(qiáng)制執(zhí)行最小權(quán)限原則,來(lái)減緩S(chǎng)QL注入漏洞的影響。籍此,應(yīng)用程序的每一個(gè)軟件組件都只能訪(fǎng)問(wèn)、并僅影響它所需要的資源。
  • 對(duì)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的Web應(yīng)用程序采用Web應(yīng)用防火墻(Web Application Firewall,WAF)。這有助于識(shí)別出針對(duì)SQL注入的各種嘗試,進(jìn)而防止此類(lèi)嘗試作用到應(yīng)用程序上。

縱然SQL注入攻擊是網(wǎng)絡(luò)犯罪分子非常流行的攻擊方法,但是如果我們能夠通過(guò)采取諸如:數(shù)據(jù)加密,執(zhí)行安全測(cè)試,以及及時(shí)更新補(bǔ)丁等適當(dāng)?shù)念A(yù)防措施,就能夠在某種程度上實(shí)現(xiàn)對(duì)數(shù)據(jù)的安全保護(hù)。

我們可以毫不夸張的說(shuō):遍布世界各地的黑客無(wú)時(shí)無(wú)刻在通過(guò)各種各樣的滲透方式,不斷地探測(cè)著目標(biāo)Web應(yīng)用中的潛在漏洞,并伺機(jī)采取各種攻擊手段。因此,我們要時(shí)刻保持高度警惕。


名稱(chēng)欄目:如何全面防御SQL注入攻擊
文章路徑:http://www.dlmjj.cn/article/cdhesoo.html