摘 要:Web頁面是所有互聯(lián)網(wǎng)應(yīng)用的主要界面和入口,各行業(yè)信息化過程中的應(yīng)用幾乎都架設(shè)在Web平臺上,關(guān)鍵業(yè)務(wù)也通過Web應(yīng)用程序來實現(xiàn),Web應(yīng)用程序的安全性變得越來越重要。Web應(yīng)用本身具有一些的安全弱點,其安全漏洞常被利用來攻擊。Web應(yīng)用程序的安全問題是一個復(fù)雜的綜合問題,在Web應(yīng)用程序開發(fā)階段就應(yīng)予以重視,分別從數(shù)據(jù)庫設(shè)計、程序設(shè)計、Web服務(wù)器等三個層面去考慮如何加強Web應(yīng)用程序的安全性。
關(guān)鍵詞:Web應(yīng)用程序;Web安全;安全弱點;安全漏洞;Web開發(fā)
中圖分類號:TP393.08
進(jìn)入二十一世紀(jì)以來,互聯(lián)網(wǎng)以驚人的速度在中國應(yīng)用和普及?;ヂ?lián)網(wǎng)已經(jīng)成為一項重要的社會基礎(chǔ)設(shè)施,Web應(yīng)用也逐漸成為軟件開發(fā)的主流之一[1]。Web頁面是所有互聯(lián)網(wǎng)應(yīng)用的主要界面和入口,各行業(yè)信息化過程中的應(yīng)用幾乎都架設(shè)在Web平臺上,關(guān)鍵業(yè)務(wù)也通過Web網(wǎng)站來實現(xiàn)。經(jīng)過調(diào)查發(fā)現(xiàn):目前,傳統(tǒng)的大多數(shù)企事業(yè)網(wǎng)站通常采用防火墻、入侵檢測/漏洞掃描等技術(shù)作為網(wǎng)站邊界的防護(hù)[2]。盡管防火墻、入侵檢測等技術(shù)已經(jīng)比較成熟,Web應(yīng)用的特殊性往往導(dǎo)致防范各類安全性問題的難度很大,因為Web應(yīng)用攻擊通常來自應(yīng)用層,并且可能來自任何在線用戶,甚至包括已經(jīng)通過認(rèn)證的用戶[3]。同時,對Web應(yīng)用程序的攻擊也可以說是形形色色、種類繁多,常見的有掛馬、SQL注入、緩沖區(qū)溢出等。正是因為這樣,Web應(yīng)用程序最容易遭受攻擊,Web應(yīng)用程序的安全性變得越來越重要。
1 Web應(yīng)用的安全弱點
Web應(yīng)用本身具有一些安全弱點,歸納起來有以下幾點:
(1)TCP/IP協(xié)議本身的缺陷。
(2)網(wǎng)絡(luò)結(jié)構(gòu)的不安全性。
(3)數(shù)據(jù)竊聽。
(4)驗證手段的有效性問題。
(5)人為因素。
2 Web應(yīng)用程序的安全漏洞
根據(jù)Symantec發(fā)布的《SymantecInternetSecurItythreatreport》,60%以上的軟件安全漏洞是關(guān)于Web應(yīng)用的[4]。開放式Web應(yīng)用程序安全項目(openWebapplIcatIonSecurItyproject,OWASP)在2010年公布的Web應(yīng)用十大安全漏洞中[5]:
(1)注入漏洞。
(2)跨站腳本漏洞。
(3)失敗的認(rèn)證和會話管理。
(4)直接對象引用隱患。
(5)CSRF跨站點請求偽造。
(6)安全配置錯誤。
(7)限制URL訪問失敗。
(8)尚未驗證的訪問重定向。
(9)不安全的密碼存儲。
(10)傳輸層保護(hù)不足。
另外還值得一提的是,很多程序員常使用網(wǎng)上一些公開免費的源碼模版來開發(fā)Web應(yīng)用程序,公開的源碼的安全性低,非常容易讓黑客找到源碼的漏洞,從而威脅到Web應(yīng)用程序的安全。
3 Web應(yīng)用程序開發(fā)中的安全對策
一個Web系統(tǒng)由Web服務(wù)器系統(tǒng)、Web客戶端系統(tǒng)和Internet網(wǎng)絡(luò)組成[6]。這三個系統(tǒng)都會產(chǎn)生Web應(yīng)用程序的安全問題,所以Web應(yīng)用程序的安全問題是一個復(fù)雜的綜合問題。在Web應(yīng)用程序開發(fā)階段就應(yīng)對于安全問題予以重視,下面分別從數(shù)據(jù)庫設(shè)計、程序設(shè)計、服務(wù)器等三個層面去考慮如何加強Web應(yīng)用程序的安全性。
3.1 數(shù)據(jù)庫設(shè)計層面
數(shù)據(jù)庫存放著Web應(yīng)用程序最重要的部分:數(shù)據(jù)。在開發(fā)過程中的數(shù)據(jù)庫設(shè)計階段就應(yīng)該考慮好安全問題,以下建議有助于提高其安全性。
(1)在設(shè)計數(shù)據(jù)庫時如果涉及跨庫操作,應(yīng)盡量使用視圖來實現(xiàn)。
視圖可以讓用戶或者程序開發(fā)人員只看到他們所需要的數(shù)據(jù),而不需要把表中的所有信息與字段暴露出來,這樣增強了數(shù)據(jù)的安全性。
(2)對數(shù)據(jù)庫的操作使用存儲過程。
(3)注意使用數(shù)據(jù)庫建表時的字段類型,不要用可能被修改的字段做主鍵,否則會給相關(guān)記錄的更新帶來隱患。
(4)盡量避免大事務(wù)的處理。
(5)盡量避免使用游標(biāo)。
3.2 程序設(shè)計層面
目前大多數(shù)的網(wǎng)絡(luò)攻擊和互聯(lián)網(wǎng)安全事件源于應(yīng)用軟件自身的脆弱性,而其根源來自程序開發(fā)者在網(wǎng)頁程序編制過程中缺乏相關(guān)的安全意識和知識,并且開發(fā)完成后也缺乏相應(yīng)的代碼檢測機制和手段。這些脆弱性在日后就成為了黑客用來發(fā)動攻擊、進(jìn)行頁面篡改、以及布放和傳播網(wǎng)頁木馬的最有效途徑[7]。
Web應(yīng)用系統(tǒng)形式多樣,但其內(nèi)在特征基本一致,即具有較強的交互性并且使用數(shù)據(jù)庫系統(tǒng)。由于SQL注入使用SQL語法,從技術(shù)上講,凡是Web 應(yīng)用中構(gòu)造SQL語句的步驟均存在潛在的攻擊風(fēng)險。因此,如果對用戶的輸入不做合法性驗證,就不能避免SQL注入的發(fā)生[8]。
作為Web應(yīng)用程序的開發(fā)者,決不能假定用戶不會有惡意行為,也不能假定用戶輸入的數(shù)據(jù)都是安全的。對惡意的用戶來說,從客戶端向Web應(yīng)用程序發(fā)送具有潛在危險的數(shù)據(jù)是很容易的。程序也可能有未被檢查出的錯誤和漏洞,會成為攻擊者下手的對象。
對此開發(fā)者在設(shè)計和開發(fā)Web應(yīng)用程序時應(yīng)采取必要的安全設(shè)計措施:
(1)對用戶輸入的數(shù)據(jù)進(jìn)行客戶端驗證和服務(wù)器端驗證,嚴(yán)禁非法數(shù)據(jù)進(jìn)入數(shù)據(jù)庫。
Web應(yīng)用存在的漏洞和安全隱患很大程度上是由于對用戶的某些輸入數(shù)據(jù)缺乏相應(yīng)的校驗或異常處理機制造成的[9]。非法輸入問題是最常見的Web應(yīng)用程序安全漏洞。正確的輸入驗證是防御目前針對Web應(yīng)用程序的攻擊最有效的方法之一,是防止XSS、SQL注入、緩沖區(qū)溢出和其他輸入攻擊的有效手段,合適的輸入驗證能減少大量軟件的弱點。
驗證應(yīng)盡量放在客戶端進(jìn)行,這樣可以減輕服務(wù)器的壓力,界面更友好,缺點則是它并不能保證所有的攻擊被阻止,因為當(dāng)攻擊者了解了它的規(guī)則后可以輕易的變換攻擊腳本來繞道過它的防御[10]。所以,服務(wù)器端驗證絕不能省略
(2)啟用驗證碼,防止黑客用程序窮舉賬戶密碼,同時防止垃圾信息。
(3)注意文件上傳。如果一定要設(shè)計文件上傳功能,要限制可上傳的文件類型和大小,規(guī)定好上傳文件的權(quán)限,且不能讓用戶自行定義存儲路徑和文件名,可以考慮其他的設(shè)計方法,例如:讓應(yīng)用程序為用戶確定文件名,用戶輸入的文件名為別名。對于圖像上傳功能,需要驗證上傳圖像的格式及大小是否合乎要求。
(4)采用安全編碼標(biāo)準(zhǔn)。為開發(fā)語言和平臺指定安全編碼標(biāo)準(zhǔn),并采用這些標(biāo)準(zhǔn)。程序只應(yīng)實現(xiàn)指定的功能,代碼保持簡單性、規(guī)范性。復(fù)雜的設(shè)計既提高了編碼時錯誤的機率,也更易產(chǎn)生安全漏洞。盡可能使用安全函數(shù)進(jìn)行編碼,必須考慮意外情況并進(jìn)行處理。
(5)不要回顯未經(jīng)篩選的數(shù)據(jù)。不要將敏感信息,例如隱藏域或Cookie存儲在可從瀏覽器訪問的位置,更不要將密碼存儲在Cookie中。
(6)及時關(guān)閉已不用的對象。例如:在使用ASP.NET開發(fā)時,DataReader對象需要及時關(guān)閉。
(7)盡量使用簡單SQL,避免兩表以及多表聯(lián)查。
(8)留意編譯器警告,編譯代碼時使用編譯器的最高警告級別,通過修改代碼來減少警告。
(9)Web應(yīng)用程序開發(fā)采用分層架構(gòu),且分層應(yīng)該清晰。
(10)使用有效的安全質(zhì)量保證技術(shù)。好的質(zhì)量保證技術(shù)能有效的發(fā)現(xiàn)和消除弱點。滲透測試、Fuzz測試,以及源代碼審計都能作為一種有效的質(zhì)量保證措施,獨立的安全審查能夠建立更安全的系統(tǒng)。
(11)不要試圖在發(fā)現(xiàn)錯誤后繼續(xù)執(zhí)行Web應(yīng)用程序。
3.3 服務(wù)器層面
Web應(yīng)用系統(tǒng)涉及的服務(wù)器主要是Web服務(wù)器和數(shù)據(jù)庫服務(wù)器。服務(wù)器的安全功能要求包括運行安全和數(shù)據(jù)安全[11]。服務(wù)器的安全首先來自操作系統(tǒng)的安全,因為操作系統(tǒng)管理和控制著軟硬件資源和網(wǎng)絡(luò)資源,是防護(hù)入侵的第一道防線,只有操作系統(tǒng)安全了,整個系統(tǒng)才會安全。
為保證Web應(yīng)用程序的安全運行,在服務(wù)器架設(shè)和配置時可采取的如下措施:
(1)保證服務(wù)器的物理安全。
(2)定期對Web應(yīng)用程序及數(shù)據(jù)庫進(jìn)行備份,并將備份存放在安全的地方。
(3)使用安全的文件系統(tǒng)(如NTFS),正確設(shè)置網(wǎng)站物理目錄的訪問權(quán)限,實行權(quán)限最小化原則。
(4)關(guān)閉服務(wù)器上的不使用的端口和服務(wù)。
(5)運行監(jiān)視入站和出站通信的病毒檢查程序。
(6)數(shù)據(jù)庫服務(wù)器一定要放在防火墻內(nèi),保證和萬維網(wǎng)隔離開。
(7)Web服務(wù)器采用縱深防御。這是一個通用的安全原則,從多個防御策略中規(guī)避風(fēng)險,如果一層防御失效,則另一層防御還在發(fā)揮作用。
(8)經(jīng)常檢查日志,查找可疑活動,包括服務(wù)器日志和SQL日志等。
(9)及時安裝操作系統(tǒng)或其他應(yīng)用軟件供應(yīng)商提供的最新安全補丁程序。
(10)Web服務(wù)器管理員應(yīng)常對服務(wù)器的安全風(fēng)險進(jìn)行檢查,例如使用端口掃描程序進(jìn)行系統(tǒng)風(fēng)險分析等。
(11)架設(shè)Web應(yīng)用防火墻。
Web應(yīng)用防火墻(Web Application Firewall,WAF)作為一種專業(yè)的Web 安全防護(hù)工具,可深入檢測Injection、CSS、CSRF及分布式拒絕服務(wù)(Distributed Denial of Service,DDoS)等應(yīng)用層攻擊行為,充分保障Web應(yīng)用的高可用性和可靠性,很好地完成傳統(tǒng)IDS無法完成的任務(wù)[12]。目前主要的軟硬件產(chǎn)品有ModSecurity、WebKnight、WebDefend、BigIP、iwall、冰之眼等[13]。
總的來說,實施安全,要達(dá)到好的效果,必須要完成兩個目標(biāo):①安全方案正確、可靠。②能夠發(fā)現(xiàn)所有可能存在的安全問題,不出現(xiàn)遺漏[14]。
4 結(jié)束語
Web應(yīng)用程序的開放性、易用性使其安全問題日益突出。如果只想著將Web應(yīng)用程序開發(fā)出來,而不認(rèn)真考慮安全運行是極為錯誤的。不管是做什么Web應(yīng)用程序,安全是首先要考慮的,因為用戶最不能容忍的問題就是安全問題。
Web應(yīng)用本身具有一些天生的安全弱點,其安全漏洞常被利用來攻擊。在設(shè)計和開發(fā)Web應(yīng)用程序時必須采取各種安全技術(shù)措施和手段以加強其安全性,以保證其在開放的互聯(lián)網(wǎng)環(huán)境中能正確安全地運行,而最安全、最有能力抵御攻擊的Web應(yīng)用程序是那些應(yīng)用安全思想開發(fā)的Web應(yīng)用程序。
參考文獻(xiàn):
[1]于莉莉,杜蒙杉,張平,紀(jì)玲利.Web安全性測試技術(shù)綜述[J].計算機應(yīng)用研究,2012(11):4001-4005.
[2]薛輝,鄧軍,葉柏龍.一種分布式網(wǎng)站安全防護(hù)系統(tǒng)[J].計算機系統(tǒng)應(yīng)用,2012(03):42-45.
[3]TIPTON H F,KRAUSE M.InformatIon SecurIty management handbook[M].6th ed.NeW York:Auerbach PublIctIonS,2006.
[4]Symantec CorporatIon.SymatecInternet SecurIty threat report.trendS for January-June 07,Volume XII[R].2007.
[5]Open Web ApplIcatIon SecurIty Project.OWASP top 10-2010:the ten moSt crItIcal Web applIcatIon SecurIty rISkS[R].2010.
[6]羅福強.Web應(yīng)用程序設(shè)計實用教程[M].北京:清華大學(xué)出版社,2010.
[7]徐竹冰.網(wǎng)站應(yīng)用層安全防護(hù)體系[J].計算機系統(tǒng)應(yīng)用,2012(01):81-84.
[8]馬凱,蔡皖東,姚燁.Web2.0環(huán)境下SQL注入漏洞注入點提取方法[J].計算機技術(shù)與發(fā)展,2013(03):121-124.
[9]HUANG Yao-Wen,HUANG S K,LINTP,et al.Web applIcatIon SecurIty aSSeSSment by fault InjectIon and behave Ior monItorIng[C]//Proc of the 12th InternatIonal World WIde Web Conference.NeWYorK:ACM PreSS,2003:148-159.
[10]王溢,李舟軍,郭濤.防御代碼注入式攻擊的字面值污染方法[J].計算機研究與發(fā)展,2012(11):2414-2423.
[11]陳偉東,王超,張力,徐崢,邢希雙.服務(wù)器系統(tǒng)安全內(nèi)核研究與實現(xiàn)[J].計算機應(yīng)用與軟件,2013(03):304-307.
[12]Becher M. Web Application Firewalls: Applied Web Application Security[M].[S. l.]:VDM Verlag,2007.
[13]姚琳琳,何倩倩,王勇,趙幫.基于分布式對等架構(gòu)的Web應(yīng)用防火墻[J].計算機工程,2012(22):114-118.
[14]吳翰清.白帽子講Web安全[M].北京:電子工業(yè)出版社,2012:280.
作者簡介:馬宏偉(1969-),男,甘肅武威人,講師,工學(xué)碩士,主要研究方向:網(wǎng)絡(luò)安全、Web技術(shù)。
作者單位:新疆輕工職業(yè)技術(shù)學(xué)院信息與軟件分院,烏魯木齊 830021