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