方友志
摘要:該文介紹了Web應(yīng)用中SQL注入 攻擊的原理、SQL注入攻擊帶來(lái)的危害,并針對(duì)如何防范SQL注入攻擊提出了有效的方法,以降低Web應(yīng)用受到SQL注入攻擊的風(fēng)險(xiǎn),更好地保護(hù)高校中Web應(yīng)用的安全和使用。
關(guān)鍵詞:Web應(yīng)用;SQL注入;注入攻擊;注入防范
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)29-0040-02
隨著高校信息化、數(shù)字化校園建設(shè)的不斷推進(jìn),高校校園網(wǎng)中部署的各種Web門(mén)戶網(wǎng)站及教學(xué)應(yīng)用平臺(tái)數(shù)量逐漸增多,由于開(kāi)發(fā)這些應(yīng)用的程序員水平和經(jīng)驗(yàn)參差不齊,其中一部分程序員在編寫(xiě)相應(yīng)的代碼時(shí)沒(méi)有對(duì)用戶輸入的數(shù)據(jù)進(jìn)行合法性檢查,導(dǎo)致一些Web應(yīng)用程序存在SQL注入安全漏洞,容易受到來(lái)自互聯(lián)網(wǎng)的SQL注入攻擊,對(duì)校園網(wǎng)中各Web應(yīng)用系統(tǒng)數(shù)據(jù)信息安全構(gòu)成重大威脅。本文對(duì)Web應(yīng)用中常見(jiàn)的SQL攻擊原理及防范技術(shù)進(jìn)行分析研究。
1SOL注入攻擊原理
SQU結(jié)構(gòu)化查詢語(yǔ)言)是一種數(shù)據(jù)庫(kù)查詢語(yǔ)言,所謂的SQL注入攻擊就是專門(mén)對(duì)Web應(yīng)用后臺(tái)數(shù)據(jù)庫(kù)的一種攻擊行為。攻擊者利用搜索引擎在Web應(yīng)用系統(tǒng)中通過(guò)手工或者SQL注入工具進(jìn)行測(cè)試,尋找Web應(yīng)用中存在的SQL注入漏洞及可注入點(diǎn),并判斷其數(shù)據(jù)庫(kù)類型,其次在構(gòu)造一些特殊字符串通過(guò)網(wǎng)頁(yè)或其他方式傳遞給Web應(yīng)用系統(tǒng),從而實(shí)現(xiàn)對(duì)Web應(yīng)用系統(tǒng)數(shù)據(jù)庫(kù)的非法訪問(wèn)或操作。SQL注入攻擊的產(chǎn)生主要是因?yàn)槟承¦eb應(yīng)用系統(tǒng)數(shù)據(jù)庫(kù)的外部接口沒(méi)有對(duì)用戶輸入的數(shù)據(jù)進(jìn)行有效驗(yàn)證。比如先前互聯(lián)網(wǎng)上出現(xiàn)的很多網(wǎng)站用戶數(shù)據(jù)泄露大多都是通過(guò)這種方式實(shí)現(xiàn)的。
下面以一個(gè)Web應(yīng)用系統(tǒng)的登錄頁(yè)面為例來(lái)闡述SQL注入攻擊原理,一般的Web應(yīng)用系統(tǒng)的登錄驗(yàn)證頁(yè)面都有user-name和password兩個(gè)參數(shù)用于輸入登錄系統(tǒng)的用戶名和密碼,系統(tǒng)通過(guò)查找數(shù)據(jù)庫(kù)中l(wèi)ogin表里存放的數(shù)據(jù)來(lái)比對(duì)用戶輸入的用戶名和密碼進(jìn)行授權(quán)操作。常見(jiàn)的用于驗(yàn)證用戶登錄身份合法的SQL語(yǔ)句為:
select count(*)from login where username='usernameandpassword=password
假設(shè)正確的系統(tǒng)管理員用戶名和密碼分別為ad-min,admin888,那么傳輸?shù)胶笈_(tái)用于驗(yàn)證的SQL語(yǔ)句為:
select count(*)from login where usertmme='adminand pass-word='admin888'
通過(guò)上述的語(yǔ)句可以看到該方法中的usernalne和pass-word的值是沒(méi)有經(jīng)過(guò)任何驗(yàn)證,直接將前端用戶輸入的數(shù)據(jù)以字符串的形式拼接在一起形成SQL驗(yàn)證語(yǔ)句,這樣的語(yǔ)句存在注入漏洞,且風(fēng)險(xiǎn)非常大。下面就是一個(gè)針對(duì)繞過(guò)這種驗(yàn)證方式以admin身份登錄系統(tǒng)的SQL語(yǔ)句:
select count(*)from login where username='admin'--andpassword='23456'
在上述語(yǔ)句中進(jìn)行了兩個(gè)判斷,即username='admin'和password='123456',當(dāng)兩個(gè)都為“真”時(shí),整個(gè)語(yǔ)句結(jié)果就為“真”,但上述輸入的密碼是'123456'顯然是不正確的,因?yàn)槭褂昧俗⑨尫?-”,在注釋符之后的語(yǔ)句將忽略不被執(zhí)行,即se-lect count(*)from login where username='admin結(jié)果肯定為“真”,從而通過(guò)驗(yàn)證達(dá)到登錄系統(tǒng)的目的。
2SQL注入攻擊的危害
SQL注入攻擊的主要目的不是Web應(yīng)用系統(tǒng)的服務(wù)器,而是想得到Web應(yīng)用系統(tǒng)最高的管理員權(quán)限及數(shù)據(jù)庫(kù)中的重要數(shù)據(jù)。攻擊者發(fā)現(xiàn)Web應(yīng)用中的漏洞,進(jìn)行SQL注入攻擊,一旦攻擊成功,拿到權(quán)限便會(huì)給Web應(yīng)用系統(tǒng)中數(shù)據(jù)信息的安全帶來(lái)危害。尤其是在高校中,帶來(lái)的危害主要有以下四點(diǎn):
1)在未授權(quán)的情況下獲得高校校園網(wǎng)中各種Web應(yīng)用系統(tǒng)權(quán)限,非法讀取、篡改、添加、刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù);
2)非法盜取高校校園網(wǎng)中各種Web應(yīng)用系統(tǒng)數(shù)據(jù)庫(kù)中的重要數(shù)據(jù)及師生個(gè)人信息等敏感信息以獲取利益;
3)修改學(xué)校門(mén)戶網(wǎng)站及各種Web應(yīng)用系統(tǒng)網(wǎng)頁(yè)內(nèi)容,發(fā)布虛假?gòu)V告信息和掛馬等;
4)上傳木馬病毒或者webshell,留下后門(mén),進(jìn)而控制相應(yīng)的Web應(yīng)用服務(wù)器。
3高校web應(yīng)用中如何防范sQL注入攻擊
3.1從Web應(yīng)用系統(tǒng)程序本身上進(jìn)行防范
1)數(shù)據(jù)庫(kù)權(quán)限進(jìn)行分級(jí)控制。各個(gè)級(jí)別的用戶只給訪問(wèn)數(shù)據(jù)庫(kù)的web應(yīng)用功能所需的最低權(quán)限,只能對(duì)授權(quán)給自己的數(shù)據(jù)進(jìn)行查詢、增刪等操作,防止未授權(quán)用戶對(duì)數(shù)據(jù)庫(kù)非法操作。
2)用戶輸入的數(shù)據(jù)進(jìn)行有效性驗(yàn)證。比如對(duì)接收的數(shù)據(jù)類型有明確要求或限制的,要進(jìn)行數(shù)據(jù)類型有效驗(yàn)證,如數(shù)值型、日期型、英文或數(shù)字等;對(duì)數(shù)據(jù)長(zhǎng)度有限制的,如只允許輸入10字符,那么就要嚴(yán)格控制輸入的內(nèi)容在10個(gè)字符以內(nèi),因?yàn)橐话鉙QL注入攻擊的語(yǔ)句是有一定的長(zhǎng)度的,通過(guò)這樣限制后會(huì)增加注入攻擊的難度。
3)屏蔽Web應(yīng)用系統(tǒng)錯(cuò)誤提示信息返回頁(yè)面。一般攻擊者會(huì)通過(guò)網(wǎng)頁(yè)提交一些攻擊代碼后,根據(jù)服務(wù)器返回的錯(cuò)誤提示信息,獲取一些關(guān)于Web應(yīng)用系統(tǒng)的有用信息,為下一步攻擊做準(zhǔn)備,因此在程序開(kāi)發(fā)中應(yīng)通過(guò)自定義錯(cuò)誤提示信息頁(yè)或屏蔽錯(cuò)誤提示信息頁(yè)來(lái)防止攻擊者通過(guò)這種方式獲取有用信息。
4)刪除Web應(yīng)用系統(tǒng)中一些不安全和不必要的存儲(chǔ)過(guò)程。攻擊者SQL注入攻擊成功后,變會(huì)利用xp_cmdshell之類的存儲(chǔ)擴(kuò)展來(lái)獲取服務(wù)器權(quán)限。
5)過(guò)濾掉所有敏感字符串及單引號(hào),來(lái)防止攻擊者非法登陸。
6)對(duì)數(shù)據(jù)庫(kù)中的重要信息進(jìn)行加密,提高數(shù)據(jù)的安全性。
3.2從Web應(yīng)用系統(tǒng)管理上進(jìn)行防范
1)系統(tǒng)管理員應(yīng)加強(qiáng)自我學(xué)習(xí),了解及掌握相關(guān)領(lǐng)域安全方面的最新消息,及時(shí)更新相應(yīng)漏洞和補(bǔ)丁。
2)使用漏洞掃描工具,掃描Web應(yīng)用系統(tǒng)中的SQL注入漏洞,做到及時(shí)更新,提前防范。
3)安裝安全軟件和Web應(yīng)用防火墻,通過(guò)它們對(duì)服務(wù)器和Web應(yīng)用進(jìn)行實(shí)時(shí)監(jiān)控,能夠及時(shí)屏蔽和阻止外來(lái)的攻擊。
4結(jié)束語(yǔ)
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,Web應(yīng)用越來(lái)越多,一些新型的SQL注入攻擊方法也隨之誕生,對(duì)于Web應(yīng)用中SQL注入攻擊的防范不能止于眼前。因此,在應(yīng)用開(kāi)發(fā)時(shí)就應(yīng)盡量采用先進(jìn)的技術(shù),后期在使用時(shí)還應(yīng)該綜合運(yùn)用安全軟件、Web防火墻、漏洞掃描等相關(guān)技術(shù)進(jìn)行輔助防范,才能將SQL注入攻擊的風(fēng)險(xiǎn)降至最低,以保證Web應(yīng)用系統(tǒng)的安全。