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