摘 要:HTML5是新一代的Web應(yīng)用程序構(gòu)建基準(zhǔn),它包含了全新的標(biāo)簽格式、改良的通信機制、本地存儲、離線應(yīng)用和多線程等諸多令人激動的新特性。但同時這些新特性也引入了新的安全問題。本文針對新農(nóng)村信息化服務(wù)平臺使用對象的特殊性,論述了利用HTML5這個新的技術(shù)來開發(fā)此服務(wù)平臺更應(yīng)該考慮的安全問題,并給出了相應(yīng)的對策。
關(guān)鍵詞:HTML5;新農(nóng)村;安全;攻擊;信息化
中圖分類號:TP311.52
隨著信息技術(shù)和通信技術(shù)的高速發(fā)展和廣泛應(yīng)用,信息化已經(jīng)是社會各個角落不可缺少的一部分,更加讓我們難以預(yù)料的是,人們對信息的獲取方式已經(jīng)從原來的只能在固定的場所、單一的電腦上獲得,到現(xiàn)在的人們無論何時何地,只要有一部智能手機就可以獲得想要的信息。對于新農(nóng)村的建設(shè)中一個重要部分——信息化建設(shè),也在追隨著新技術(shù)帶來的快感,人們都在將自己的信息化服務(wù)平臺從電腦移植到手機。
對于移動開發(fā)技術(shù),HTML5現(xiàn)在得到主流移動設(shè)備的普遍支持,并成為創(chuàng)建和部署面向移動平臺瀏覽器內(nèi)容的最佳解決方案。雖然HTML5對舊有的安全策略進(jìn)行了非常多的補充,如HTML5為iframe元素增加了sandbox屬性防止不信任的Web頁面執(zhí)行某些操作,訪問父頁面的DOM、執(zhí)行腳本、訪問本地存儲或者本地數(shù)據(jù)庫等等。但是這也對HTML5開發(fā)的面向移動的應(yīng)用程序面臨新的被攻擊風(fēng)險。
1 HTML5新技術(shù)帶來的攻擊與防御
在新農(nóng)村信息化移動服務(wù)平臺的建設(shè)中,如何有效的防范HTML5新技術(shù)帶來的攻擊問題,應(yīng)從以下幾方面防范:
1.1 防御CORS攻擊。CORS-CrossOrigin Resources Sharing,也即跨源資源共享,它定義了一種瀏覽器和服務(wù)器交互的方式來確定是否允許跨域請求。
CORS非常有用,可以共享許多內(nèi)容,不過這里存在風(fēng)險。因為它完全是一個盲目的協(xié)議,只是通過HTTP頭來控制。它的風(fēng)險包括:(1)HTTP頭只能說明請求來自一個特定的域,但是并不能保證這個事實。因為HTTP頭可以被偽造。所以未經(jīng)身份驗證的跨域請求應(yīng)該永遠(yuǎn)不會被信任。如果一些重要的功能需要暴露或者返回敏感信息,應(yīng)該需要驗證Session ID。(2)第三方有可能被入侵。舉一個場景,F(xiàn)riendFeed通過跨域請求訪問Twitter,F(xiàn)riendFeed請求tweets、提交tweets并且執(zhí)行一些用戶操作,Twitter提供響應(yīng)。兩者都互相相信對方,所以FriendFeed并不驗證獲取數(shù)據(jù)的有效性,Twitter也針對Twitter開放了大部分的功能。
對于CORS攻擊,首先應(yīng)該做到不信任未經(jīng)身份驗證的跨域請求,必須先驗證Session ID或者Cookie;其次對于請求方來說驗證接收的數(shù)據(jù)有效性,服務(wù)方僅暴露最少最必須的功能;再次通過多種條件屏蔽掉非法的請求,例如HTTP頭、參數(shù)等。
1.2 防御Web Storage攻擊。HTML5支持Web Storage,開發(fā)者可以為應(yīng)用創(chuàng)建本地存儲,存儲一些有用的信息。LocalStorage的API都是通過Javascript提供的,這樣攻擊者可以通過XSS攻擊竊取信息,例如用戶token或者資料。攻擊者可以用下面的腳本遍歷本地存儲。
if(localStorage.length){
for(I in localStorage) {
console.log(i);
console.log(localStorage.getItem(i));
}
}
對于Web Storage攻擊,我們應(yīng)盡量做到數(shù)據(jù)放在合適的作用域里,并且不要存儲敏感的信息。
1.3 防御Web SQL攻擊。數(shù)據(jù)庫安全一直是后端人員廣泛關(guān)注和需要預(yù)防的問題。但是自從HTML5引入本地數(shù)據(jù)庫和Web SQL之后,前端開發(fā)對于數(shù)據(jù)庫的安全也必須要有所了解和警惕。Web SQL的安全問題通常表現(xiàn)為兩個部分:
第一種是SQL注入:攻擊者可以通過SQL注入點來進(jìn)行數(shù)據(jù)庫攻擊。如我們有一個URL為http:/blog.csdn.net/hfahe?id=1,它接收了一個id參數(shù)來進(jìn)行本地數(shù)據(jù)庫查詢并輸出,對應(yīng)的SQL語句為“select name from user where id = 1”。針對這個簡單的SQL查詢,攻擊者可以構(gòu)造一個虛假的輸入數(shù)據(jù)“1 or 1 = 1”,那么我們的SQL語句將變?yōu)椤皊elect name from user where id = 1 or 1 = 1”。這就相當(dāng)糟糕了,因為1=1這個條件總是成立的,那么這條語句將遍歷數(shù)據(jù)庫user表里的所有記錄并進(jìn)行輸出。
另外一方面,如果Web App有XSS漏洞,那么本地數(shù)據(jù)很容易泄漏,可以想想本地數(shù)據(jù)庫里存儲了用戶最近交易記錄或者私信的情況。
針對WebSQL攻擊,應(yīng)做到如下方法預(yù)防:(1)檢查輸入類型,過濾危險字符。我們需要保證輸入類型符合預(yù)期,例如上面的id參數(shù)一定是數(shù)字類型;同時過濾掉危險的關(guān)鍵字和符號,像PHP里addslashes這個函數(shù)的作用一樣。(2)在SQL語句中盡量使用參數(shù)形式。例如:executeSql(\"SELECTname FROM stud WHERE id=\" + input_id)這種字符串拼接的形式并不安全,可以換為executeSql(\"SELECTname FROM stud WHERE id=?“,[input_id]);)這樣能保證參數(shù)的輸入符合設(shè)定的類型。(3)謹(jǐn)慎對待每一次SQL操作。無論是select、modify、update或者delete,你編寫的任何一條SQL語句操作都有可能成為攻擊者的攻擊對象,造成重大損失,所以都必須要謹(jǐn)慎對待。(4)不要存儲重要數(shù)據(jù)。本地數(shù)據(jù)庫永遠(yuǎn)透明而不安全,重要的數(shù)據(jù)必須要存儲在服務(wù)器上,本地數(shù)據(jù)庫里沒有重要數(shù)據(jù)就不會對用戶造成重大損失。(5)杜絕XSS漏洞。
1.4 防御新標(biāo)簽攻擊。HTML5去掉了很多過時的標(biāo)簽,例如
它使用了一個source標(biāo)簽,而沒有指定具體的src,所以后面的onerror方法會立即得到執(zhí)行。
攻擊者利用上面的示例方式就可以對系統(tǒng)進(jìn)行XSS注入攻擊。例如攻擊者輸入http://www.yujie.com/1.php?text=
2 總結(jié)
面對HTML5新技術(shù)帶來的安全問題,我們在利用新技術(shù)進(jìn)行新農(nóng)村信息化移動服務(wù)平臺開發(fā)過程中,更應(yīng)該謹(jǐn)慎使用,因為我們的平臺面向的是廣大農(nóng)民,他們的安全意識還很單薄。為了使平臺能得到更好的用戶體驗,在追求新技術(shù)的同時,我們更要關(guān)注新技術(shù)帶來的安全問題。
參考文獻(xiàn):
[1]蔡友林,潘仕彬,何為民.基于IC卡的電子錢包系統(tǒng)設(shè)計與實現(xiàn)[J].東華理工大學(xué)學(xué)報:自然科學(xué)版,2008,31(2):197-200.
[2]王靜,呂勇奇.小額支付系統(tǒng)條件下城市金融綜合服務(wù)平臺發(fā)展創(chuàng)新探索[J].金融電子化,2009(5):45-47.
[3]PILGRIM M.HTML5:Up and Running[M].Sebastopol:O'Reilly Media,2010.
[4]沈昌祥.云計算安全[J].信息安全與通信保密,2010(12):12-15.
作者簡介:韓智慧(1978-),女,碩士,講師,研究方向:計算機應(yīng)用技術(shù);趙建華(1979-),通訊作者,男,碩士,研究方向:人工智能與數(shù)據(jù)挖掘。
作者單位:長春科技學(xué)院 信息工程學(xué)院,長春 130600;長春師范大學(xué) 網(wǎng)絡(luò)中心,長春 130032
項目來源:長春科技學(xué)院校內(nèi)科研課題“關(guān)于新農(nóng)村信息化綜合服務(wù)平臺的設(shè)計與運行研究”。