sql注入攻擊及在java web應(yīng)用中的防御方法研究_第1頁(yè)
已閱讀1頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  SQL注入攻擊及在Java Web應(yīng)用中的防御方法研究</p><p>  【摘要】 互聯(lián)網(wǎng)的高速發(fā)展使得網(wǎng)絡(luò)安全成為各界關(guān)注的焦點(diǎn)問(wèn)題。人們把在電子商務(wù)、社交網(wǎng)絡(luò)等互聯(lián)網(wǎng)應(yīng)用中產(chǎn)生的大量重要數(shù)據(jù)存儲(chǔ)于數(shù)據(jù)庫(kù)中,而這些數(shù)據(jù)庫(kù)便成為網(wǎng)絡(luò)黑客的攻擊目標(biāo)。目前,SQL注入攻擊是網(wǎng)絡(luò)中最為猖獗的黑客攻擊行為之一。本文將詳細(xì)闡述SQL注入式攻擊的原理,并給出在Java Web應(yīng)用程序中防御SQL注入攻

2、擊的有效方法。 </p><p>  【關(guān)鍵詞】 SQL注入 網(wǎng)絡(luò)安全 數(shù)據(jù)庫(kù) Java Web 防御 </p><p>  如今,互聯(lián)網(wǎng)已經(jīng)融入現(xiàn)代社會(huì)的方方面面,電子商務(wù)、社交網(wǎng)絡(luò)、在線教育(MOOC)已經(jīng)成為當(dāng)下人們生活不可或缺的組成。人們?cè)谑褂眠@些互聯(lián)網(wǎng)應(yīng)用時(shí),會(huì)產(chǎn)生大量與自身相關(guān)的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中。由于這些數(shù)據(jù)的潛在價(jià)值(如個(gè)人隱私數(shù)據(jù)、網(wǎng)銀賬戶等),使得它們成為網(wǎng)絡(luò)黑客主要的

3、攻擊目標(biāo)之一。目前,最為常見(jiàn)的、破壞性最強(qiáng)的針對(duì)互聯(lián)網(wǎng)應(yīng)用數(shù)據(jù)庫(kù)系統(tǒng)的攻擊方式是SQL注入攻擊。綜合統(tǒng)計(jì)資料來(lái)看,SQL注入約占據(jù)互聯(lián)網(wǎng)安全威脅性事件總數(shù)的1/3,且程逐年遞增趨勢(shì);DB Networks的統(tǒng)計(jì)表明,2014年SQL注入漏洞數(shù)量較2013年增長(zhǎng)104%[1]。因此,本文將探討、研究注入技術(shù)背后的原理、實(shí)施方法和分類(lèi),來(lái)更好的應(yīng)對(duì)這類(lèi)攻擊;同時(shí)結(jié)合Java Web開(kāi)發(fā)技術(shù),給出在Java Web應(yīng)用程序中防御SQL注入攻擊

4、的有效方法。 </p><p>  一、SQL注入攻擊的原理 </p><p>  SQL注入攻擊(SQL Injection Attack, SQLI),是指利用應(yīng)用程序?qū)优c數(shù)據(jù)庫(kù)層之間的安全漏洞、通過(guò)惡意SQL語(yǔ)句攻擊這些漏洞來(lái)非法獲取目標(biāo)數(shù)據(jù)的行為。簡(jiǎn)單來(lái)說(shuō),精心設(shè)計(jì)的惡意SQL語(yǔ)句會(huì)從應(yīng)用程序前端提交至后臺(tái)數(shù)據(jù)庫(kù)執(zhí)行,執(zhí)行過(guò)程中應(yīng)用程序開(kāi)發(fā)者編寫(xiě)的原始SQL語(yǔ)句會(huì)被惡意語(yǔ)句篡改,從

5、而暴露攻擊者想要獲取的隱私數(shù)據(jù)。 </p><p>  圖1描述了一個(gè)B/S架構(gòu)應(yīng)用程序遭受SQL注入攻擊的基本流程。假設(shè)該系統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)中存儲(chǔ)有某單位全體員工的個(gè)人信息,提交URL: </p><p>  demo.com/liststaff?staff_id=13098 </p><p>  Web應(yīng)用服務(wù)器將獲取到參數(shù)staff_id=130 </p&

6、gt;<p>  98,并在數(shù)據(jù)庫(kù)中執(zhí)行下列SQL查詢語(yǔ)句: </p><p>  SELECT name, gender, age, salary, address </p><p>  FROM t_staff </p><p>  WHERE staff_id = ‘13098’; </p><p>  數(shù)據(jù)庫(kù)將返回員工I

7、D(staff_id)為13098的員工的詳細(xì)個(gè)人詳細(xì),如姓名、收入、家庭住址等。如果攻擊者想要竊取全部員工的個(gè)人信息,針對(duì)上述SQL查詢語(yǔ)句,他可以構(gòu)造這樣一條請(qǐng)求URL: </p><p>  demo.com/liststaff?staff_id=13098’ or ‘1’=1 </p><p>  那么在數(shù)據(jù)庫(kù)中將執(zhí)行下列查詢語(yǔ)句: </p><p>  S

8、ELECT name, gender, age, salary, address </p><p>  FROM t_staff </p><p>  WHERE staff_id = ‘13098’ or ‘1’ = 1; </p><p>  由于staff_id=‘13098’ or ‘1’ = 1為永真句,因此該系列語(yǔ)句等效為: </p>&l

9、t;p>  SELECT name, gender, age, salary, address </p><p>  至此,攻擊者成功竊取了全部員工的個(gè)人信息。 </p><p>  二、Java Web程序?qū)QL注入攻擊的防御方法 </p><p>  盡管Java Web技術(shù)在設(shè)計(jì)之初就十分重視安全性,Java Web技術(shù)也是目前最安全的開(kāi)發(fā)技術(shù)之一,但

10、在實(shí)際開(kāi)發(fā)和應(yīng)用中,使用Java Web技術(shù)構(gòu)建的應(yīng)用仍有可能受到SQL注入攻擊的破壞。本文將討論幾種在Java Web應(yīng)用中防御SQL注入攻擊的有效方法。 </p><p>  2.1 使用正則表達(dá)式過(guò)濾參數(shù) </p><p>  從前文論述我們可以看出,SQL注入攻擊的核心在于向數(shù)據(jù)庫(kù)服務(wù)器提交含有特殊含義的字符,改變?cè)糞QL語(yǔ)句的語(yǔ)義。因此,使用正則表達(dá)式過(guò)濾掉用戶提交參數(shù)中的特殊

11、字符(如轉(zhuǎn)義字符),便能大大降低發(fā)生注入攻擊的概率。 </p><p>  上述代碼中的正則表達(dá)式”.*([‘;]+|(--)+).*”可以檢測(cè)出用戶提交參數(shù)中的特殊字符(如轉(zhuǎn)義字符單引號(hào)),將其替換為空格符,防止數(shù)據(jù)庫(kù)受到注入攻擊。 </p><p>  public static String filterSQLInjection(String param) { </p>

12、<p>  return param.replaceAll(".*([’;]+|(--)+).*", ""); </p><p><b>  } </b></p><p>  String userName = filterSQLInjection(request. getParameter(userName));

13、</p><p>  String userPasswd = filterSQLInjection(request. getParameter(userPasswd)); </p><p>  2.2 使用預(yù)編譯技術(shù)防止SQL注入 </p><p>  SQL注入攻擊能夠?qū)崿F(xiàn)的基本前提是程序員使用拼接SQL語(yǔ)句的方式編寫(xiě)數(shù)據(jù)庫(kù)操作語(yǔ)句,如: </p>

14、<p>  String sql = “SELECT * FROM t_admin WHERE user_ name = ” + userName + “ AND password = ” + userPasswd; </p><p>  ResultSet rs = statement.executeQuery(sql); </p><p>  因此,防御SQL注入攻擊的最有效

15、方法是禁止使用拼接的方法編寫(xiě)SQL語(yǔ)句,轉(zhuǎn)而使用預(yù)編譯技術(shù)進(jìn)行數(shù)據(jù)庫(kù)操縱方面的開(kāi)發(fā)。 </p><p>  所謂預(yù)編譯,指的是將格式結(jié)構(gòu)固定的SQL語(yǔ)句編譯后,存儲(chǔ)在數(shù)據(jù)庫(kù)緩存中,當(dāng)調(diào)用該語(yǔ)句時(shí),直接執(zhí)行緩存中編譯后的結(jié)果。使用預(yù)編譯機(jī)制可以消除注入攻擊的隱患,因?yàn)镾QL語(yǔ)句已經(jīng)通過(guò)編譯,傳入的參數(shù)不會(huì)跟其發(fā)生任何匹配關(guān)系。在Java中,通過(guò)PreparedStatement類(lèi)實(shí)現(xiàn)了預(yù)編譯相關(guān)功能,使用方法如下:

16、 </p><p>  String sql= "SELECT * FROM t_admin WHERE user_ name=? AND password=?"; </p><p>  PreparedStatement psmt=conn.prepareSattement(sql); </p><p>  psmt.setString(1,

17、userName); </p><p>  psmt.setString(2, userPasswd); </p><p>  ResultSet rs = preState.executeQuery(); </p><p><b>  三、結(jié)束語(yǔ) </b></p><p>  本文結(jié)合實(shí)例,論述了SQL注入攻擊的原理和

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論