蔣平
摘要:學(xué)校的教務(wù)平臺(tái)和學(xué)生管理系統(tǒng)正在加速向WEB方向發(fā)展,設(shè)計(jì)一系列的技術(shù)手段,在盡量不增加開發(fā)難度和硬件費(fèi)用的前提下,提升高校管理平臺(tái)的數(shù)據(jù)庫的安全性。
關(guān)鍵字:數(shù)據(jù)庫,SQL注入,安全
1.概述
隨著互聯(lián)網(wǎng)和高校信息化的發(fā)展,學(xué)校業(yè)務(wù)上網(wǎng)成了學(xué)校的“必修課”,現(xiàn)在大部分院校都可以提供在線學(xué)生信息系統(tǒng)服務(wù)。在方便了學(xué)生的同時(shí),卻也給學(xué)校的網(wǎng)絡(luò)安全帶來了更大的挑戰(zhàn)。
在學(xué)校網(wǎng)絡(luò)安全防護(hù)的各個(gè)角度中,數(shù)據(jù)庫防護(hù)是重中之重。原因在于SQL注入攻擊風(fēng)險(xiǎn)小、開銷小、實(shí)施容易,是攻擊校園網(wǎng)絡(luò)的主要手段。同時(shí)學(xué)校信息系統(tǒng)大部分都是使用自主開發(fā)模式,費(fèi)用低周期短,但是受限于學(xué)校技術(shù)人員的軟件開發(fā)經(jīng)驗(yàn)和水平,往往存在需求分析不充分,代碼編寫不規(guī)范等問題。開發(fā)出的系統(tǒng)往往以“能用即可”為標(biāo)準(zhǔn),在安全方面存在較大隱患。網(wǎng)站的數(shù)據(jù)庫一旦被注入,常常會(huì)造成平臺(tái)癱瘓,學(xué)生信息泄露甚至成績被篡改等一系列后果。
2.常用SQL注入技術(shù)
SQL注入攻擊在國內(nèi)的流行可以追溯到本世紀(jì)初,已經(jīng)有十余年的歷史,SQL注入從原理上說都是一致的,即通過把SQL命令插入到查詢字符串中,以欺騙服務(wù)器執(zhí)行惡意的SQL命令。實(shí)現(xiàn)這一目的的手段是多種多樣的,一般來說可以分為以下幾種:
1.GET注入。如平臺(tái)有一查詢成績頁面,獲得用戶輸入的查詢參數(shù)4031后生成頁面的地址如下:http://localhost:8080/ExcelUsingXSLT/Default.aspx?studentid=4031.
此時(shí)平臺(tái)會(huì)在指定表里查詢學(xué)號(hào)為4031的學(xué)生成績。此時(shí)SQL語句的內(nèi)容如下:
SELECT * FROM SCORE WHERE student_id = 4031。而如果用戶此時(shí)將地址改為4031 'or'1'='1。
SQL語句將會(huì)變?yōu)镾ELECT * FROM SCORE WHERE student_id = 4031 or 1 = 1.由于1=1是恒真表達(dá)式,所以此時(shí)WHERE子句實(shí)際上已經(jīng)失去了作用。此時(shí)頁面將返回SCORE表中的全部數(shù)據(jù)。
2.POST注入。動(dòng)態(tài)網(wǎng)站的大部分交互性都是通過表單來實(shí)現(xiàn)的。如登陸界面會(huì)讓用戶輸入用戶名和密碼。后臺(tái)使用POST方法獲得這些參數(shù),并寫入SQL語句。此處同樣會(huì)產(chǎn)生注入漏洞。而且攻擊者可以從頁面設(shè)計(jì)中得知此處參數(shù)的大致用途,不僅是查詢,也可能是更新或刪除數(shù)據(jù)。
3.COOKIES注入。Cookies是由服務(wù)器生成,保存在客戶端的一個(gè)小文本文件。在大數(shù)據(jù)時(shí)代,Cookies的使用非常廣泛。但是Cookies也會(huì)給系統(tǒng)帶來額外的注入風(fēng)險(xiǎn)。因?yàn)锳SP獲取用戶輸入常用的request方法本身有四個(gè)集合。該方法如不指定集合,就會(huì)按照Query String>Form>Cookies>Server Variables的順序獲取數(shù)據(jù),此時(shí)就給攻擊者提供了注入的可能性。
除了前述幾種手段之外,還有XML注入,時(shí)間差盲注等方法,還有一些黑客工具使用暴力測(cè)試的方法進(jìn)行注入。通過影響到最終生成的SQL語句,SQL注入會(huì)造成數(shù)據(jù)泄露、被篡改、刪除等惡劣影響,如果系統(tǒng)使用sa賬戶連接數(shù)據(jù)庫,那攻擊者甚至可以通過操縱xp_cmdshell這樣的系統(tǒng)存儲(chǔ)過程來獲得整個(gè)系統(tǒng)的完整權(quán)限。
3.SQL注入的防范措施
學(xué)校的信息平臺(tái)開發(fā)常常是短平快式的開發(fā)方法,服務(wù)器和帶寬資源也相對(duì)有限。同時(shí),系統(tǒng)的安全性和易用性本身也是一對(duì)矛盾體。筆者結(jié)合自身的開發(fā)經(jīng)驗(yàn)和教訓(xùn),提出幾點(diǎn)SQL注入的防范思想和方法。
1.控制注入損失。在有限資源下想完全防止SQL被注入幾乎是不可能的,首先要將風(fēng)險(xiǎn)控制在可接受的范圍。方法有:
數(shù)據(jù)庫分級(jí)設(shè)計(jì)。把數(shù)據(jù)按照重要性和保密度分成幾個(gè)級(jí)別。為訪問數(shù)據(jù)庫時(shí)使用的賬戶設(shè)計(jì)好對(duì)應(yīng)的權(quán)限。這部分工作可以使用SQL的角色控制訪問系統(tǒng)來方便的實(shí)現(xiàn)且不會(huì)為系統(tǒng)帶來額外的開銷,可以在數(shù)據(jù)庫被注入之后有效地控制損失。
數(shù)據(jù)備份。如平臺(tái)需提供數(shù)據(jù)庫的UPDATE或DELETE等操作,那么對(duì)相應(yīng)的表要做好備份,并且在后臺(tái)記錄這些操作。
2.增加注入難度。在開發(fā)過程中使用一些技術(shù)手段,可以將注入的難度增加到使大部分攻擊者感覺“不合算”的地步,即可算是成功的安全措施。方法有:
對(duì)用戶輸入進(jìn)行審查。使用代碼過濾單引號(hào)、SQL關(guān)鍵字、運(yùn)算符,可以使用正則表達(dá)式進(jìn)一步規(guī)范用戶的輸入,也可以使用防注入程序、SQL注入防火墻來實(shí)現(xiàn)這一目標(biāo)。
規(guī)范參數(shù)傳遞。拼接SQL語句的方式可以說是注入漏洞的根本來源,所以作為開發(fā)人員要在平臺(tái)設(shè)計(jì)的時(shí)候要多考慮參數(shù)傳遞時(shí)可能出現(xiàn)的各種異常。使用Parameters規(guī)范參數(shù)傳遞過程、使用存儲(chǔ)過程中不再拼接SQL語句,均可以有效防止注入。
規(guī)范request方法??梢酝ㄟ^重寫request方法、指定request方法使用的集合等技術(shù)手段,防止request方法獲取到開發(fā)者并不想取得的非法數(shù)據(jù)。
4.小結(jié)
學(xué)校信息平臺(tái)的安全維護(hù)是一項(xiàng)系統(tǒng)工程,其面臨的安全環(huán)境是非常復(fù)雜的,其中有相對(duì)“善意”的攻擊如本校學(xué)生做網(wǎng)絡(luò)攻防練習(xí)或者向同學(xué)炫耀自己的技術(shù),也有惡意的如篡改成績、非法獲取學(xué)生信息甚至控制學(xué)校的信息系統(tǒng)。其中數(shù)據(jù)庫安全是一個(gè)核心環(huán)節(jié),需要開發(fā)和運(yùn)營人員對(duì)數(shù)據(jù)庫系統(tǒng)、開發(fā)平臺(tái)和網(wǎng)絡(luò)環(huán)境有更深的理解,才能有效防范攻擊,保障數(shù)據(jù)安全。
參考文獻(xiàn)
[1] CNCERT互聯(lián)網(wǎng)安全威脅報(bào)告-2014年7月. 國家互聯(lián)網(wǎng)應(yīng)急中心,2014年8月31日
[2] 馮谷、高鵬. 新型SQL注入技術(shù)研究與分析[J]. 計(jì)算機(jī)科技,2012,11A(64)
[3] 陳學(xué)平.網(wǎng)站數(shù)據(jù)庫SQL注入及防范[J].制造業(yè)自動(dòng)化2010,32(10)
[4] 歐陽漢斌.高校教務(wù)管理系統(tǒng)安全問題分析及對(duì)策[J].山東師范大學(xué)學(xué)報(bào),2008,6(22)endprint