国产成人毛片毛片久久网_国产午夜激无码av毛片不_国产乱对白精彩在线播放_av资源站中文字幕_亚洲男人的天堂网站_国产成 人 综合 亚洲网_中国国产激情一区_少妇一级淫片免费放_亚洲一本大道av久在线播放_免费观看美女裸体网站

行業(yè)動態(tài)

防御吧作為15年知名老牌域名服務(wù)商,CNNIC和CANN雙認證域名注冊商,已經(jīng)
持續(xù)為500多萬個域名提供服務(wù),包括智能DNS/自由轉(zhuǎn)移/隱私保護等服務(wù)!
SQL注入攻擊如何運作的?有哪些不同類型? 如何防御SQL注入攻擊?
2019-04-29 11:52:26 【

一、什么是SQL注入攻擊?

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

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

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

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

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

  • 繞過Web應(yīng)用的授權(quán)機制,以提取敏感信息。

  • 基于數(shù)據(jù)庫中不同數(shù)據(jù),輕松地控制應(yīng)用程序的各種行為。

  • 伴隨著用戶訪問應(yīng)用的過程,注入更多需要執(zhí)行的惡意代碼。

  • 添加、修改和刪除數(shù)據(jù),破壞數(shù)據(jù)庫,以及迫使應(yīng)用的服務(wù)不可用。

  • 在某個網(wǎng)站上,通過枚舉以獲取已注冊用戶的詳細身份信息,并將其用于攻擊其他站點。

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


三、SQL注入攻擊如何運作的?

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

不過,SQL注入攻擊會在如下兩個階段發(fā)生:

  • 研究 - 攻擊者提供一些隨機的異常參數(shù)值,以觀察應(yīng)用程序?qū)⑷绾巫龀鲰憫?yīng),進而決定進行何種攻擊嘗試。

  • 攻擊 - 在此,攻擊者會提供精心設(shè)計的參數(shù)值。應(yīng)用程序?qū)⒔馕稣麠lSQL命令,而不僅僅是數(shù)據(jù)。然后,數(shù)據(jù)庫會按照攻擊者所修改意圖,來執(zhí)行該SQL命令。

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

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

在服務(wù)器端,這一特定的SQL語句會被傳遞給相應(yīng)的函數(shù),而那個函數(shù)又將該字符串發(fā)送給已連接的數(shù)據(jù)庫。接著,該數(shù)據(jù)庫對其進行解析、執(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)

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

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

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

  • OR'1'='1' - 是一個永遠為真的條件,因此它會被應(yīng)用程序無條件地接受為有效的輸入。

  • --(雙連字符) - 是告訴SQL解析器:該行的其余部分為注釋,不必執(zhí)行。

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

值得注意的是,上面只是通過SQL的查詢,以非正式的方式獲取必要的信息。而實際上,SQL注入攻擊還有許多種類型。

四、SQL注入攻擊有哪些不同類型?

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

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

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

  • 基于錯誤的(Error-based)SQL注入 - 這種技術(shù)是根據(jù)數(shù)據(jù)庫服務(wù)器所拋出的錯誤異常消息,來獲取有關(guān)數(shù)據(jù)庫結(jié)構(gòu)方面的信息。有時候,這種簡單的攻擊方式足以讓攻擊者通過枚舉的手段獲悉整個數(shù)據(jù)庫。

  • 基于聯(lián)合的(Union-based)SQL注入 – 這種技術(shù)是利用UNION SQL操作符將兩到多個SELECT語句的結(jié)果合并為一個,然后作為HTTP響應(yīng)的一部分予以返回。

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

  • 基于布爾的(Boolean-based)SQL注入 – 這種技術(shù)根據(jù)查詢的返回結(jié)果是TRUE還是FALSE,來產(chǎn)生不同的結(jié)果。也就是說,根據(jù)結(jié)果的真?zhèn),以決定HTTP響應(yīng)中的內(nèi)容是要被更改,還是保持不變。

  • 基于時間的(Time-based)SQL注入 - 這種技術(shù)是在向數(shù)據(jù)庫發(fā)送SQL查詢的過程中,強制在數(shù)據(jù)庫響應(yīng)之前等待指定的時長(以秒為單位)。也就是說,某個網(wǎng)站的響應(yīng)耗時,將能夠向攻擊者表明其查詢結(jié)果是TRUE還是FALSE。

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

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

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

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

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

  • 通過使用靜態(tài)和動態(tài)測試,定期檢查并發(fā)現(xiàn)應(yīng)用程序中的SQL注入漏洞。

  • 通過使用參數(shù)化查詢和對象關(guān)系映射(Object Relational Mappers,ORM),來避免和修復(fù)注入漏洞。此類查詢通過指定參數(shù)的占位符,以便數(shù)據(jù)庫始終將它們視為數(shù)據(jù),而非SQL命令的一部分。

  • 使用轉(zhuǎn)義字符,來修復(fù)SQL注入漏洞,以便忽略掉一些特殊字符。

  • 通過對數(shù)據(jù)庫強制執(zhí)行最小權(quán)限原則,來減緩SQL注入漏洞的影響。籍此,應(yīng)用程序的每一個軟件組件都只能訪問、并僅影響它所需要的資源。

  • 對訪問數(shù)據(jù)庫的Web應(yīng)用程序采用Web應(yīng)用防火墻(Web Application Firewall,WAF)。這有助于識別出針對SQL注入的各種嘗試,進而防止此類嘗試作用到應(yīng)用程序上。

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

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

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

】【打印關(guān)閉】 【返回頂部
分享到QQ空間
分享到: 
上一篇免費免備案cdn有哪些? 下一篇什么是無服務(wù)器計算?如何保護無服..

立足首都,輻射全球,防御吧專注云防御及云計算服務(wù)15年!

聯(lián)系我們

服務(wù)熱線:13051179500 18910191973
企業(yè)QQ:1245940436
技術(shù)支持:010-56159998
E-Mail:xihedata.com
Copyright ? 2003-2016 fangyuba. 防御吧(完美解決防御與加速) 版權(quán)所有 增值許可:京B2-20140042號
售前咨詢
公司總機:18910191973
24小時電話:010-56159998
投訴電話:18910191973
值班售后/技術(shù)支持
售后服務(wù)/財務(wù)
備案專員
緊急電話:18610088800