華 晨 ,施化吉
(江蘇大學(xué) 江 蘇 鎮(zhèn) 江 2 12013)
HTML5是繼HTML4.01,XHTML 1.0和DOM 2 HTML后的又一個(gè)重要版本,旨在消除Internet程序?qū)?Flash,Silverlight,JavaFX一類瀏覽器插件的依賴。除了原先的DOM接口,HTML5增加了更多API,如:本地音頻視頻播放;硬件加速;本地運(yùn)行(即使在 Internet連接中斷之后);從桌面拖放文件到瀏覽器上傳;語(yǔ)義化標(biāo)記。隨著萬(wàn)維網(wǎng)聯(lián)盟于2008年1月第1份HT ML5草案的發(fā)布,HTML5開(kāi)啟了WEB應(yīng)用的新時(shí)代,各大著名IT公司相繼推出了支持新的網(wǎng)頁(yè)格式的IT產(chǎn)品。HT ML5與之前的版本相比,最為顯著的特點(diǎn)是為開(kāi)發(fā)者提供了一個(gè)不再依靠插件和擴(kuò)展的完整應(yīng)用平臺(tái)。現(xiàn)在使用HT ML5規(guī)范的各種WEB應(yīng)用方興未艾,勢(shì)不可擋。它展現(xiàn)出來(lái)的許多新特性在改變WEB世界同時(shí)也對(duì)網(wǎng)絡(luò)安全帶來(lái)了許多新挑戰(zhàn)[1-2]。
HTML5在廢除了一些舊標(biāo)簽的同時(shí)也增加了一些新標(biāo)簽來(lái)增強(qiáng)網(wǎng)頁(yè)的表現(xiàn)性能。但這同時(shí)也給攻擊者帶來(lái)了新的機(jī)會(huì)。
一些xss filter如果建立了一個(gè)黑名單的話,則可能不會(huì)覆蓋到HTML5新增的標(biāo)簽和功能,從而發(fā)生XSS。
例如
[3]
這段遠(yuǎn)程加載視頻的代碼成功的繞過(guò)了XSS Filter。
我們對(duì)此攻擊的防御方式是,對(duì)前端或者后端的XSS Filter進(jìn)行優(yōu)化,添加過(guò)濾規(guī)則或者黑名單。
1)
在HTML5中專門為
Sandbox屬性可以通過(guò)參數(shù)來(lái)支持更精確的控制。如表1所示。
有的行為,如”彈出窗口”,即使設(shè)置了allow-scripts,也是不允許的。毫無(wú)疑問(wèn),sandbox屬性極大地增強(qiáng)了應(yīng)用iframe的安全性。
表1 Sandbox屬性參數(shù)Tab.1 Sandbox attribute parameters
2)HTML5中為標(biāo)簽定義了一個(gè)新的Link Type:noreferrer屬性。
標(biāo)簽指定了noreferrer后,瀏覽器在請(qǐng)求該標(biāo)簽指定的地址時(shí)將不再發(fā)送Referer(header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請(qǐng)求的時(shí)候,一般會(huì)帶上Referer,告訴服務(wù)器是從哪個(gè)頁(yè)面鏈接過(guò)來(lái)的,服務(wù)器因此可以獲得一些信息用于處理)。
這個(gè)屬性需要開(kāi)發(fā)者手動(dòng)的添加到頁(yè)面標(biāo)簽中,這樣可以保護(hù)敏感信息和隱私。
瀏覽器實(shí)現(xiàn)的同源策略(Same Origin Policy簡(jiǎn)稱SOP)限制了腳本的跨域請(qǐng)求。指一個(gè)域的文檔或腳本,不能獲取或修改另一個(gè)域的文檔的屬性。也就是Ajax不能跨域訪問(wèn),Web資源訪問(wèn)的根本策略都是建立在SOP基礎(chǔ)上的。但互聯(lián)網(wǎng)的發(fā)展趨勢(shì)是越來(lái)越開(kāi)放的,因此跨域訪問(wèn)的需求也變得越來(lái)越迫切。但同源策略給web開(kāi)發(fā)者帶來(lái)了許多困擾,因此web開(kāi)發(fā)者不得不用jsonp、iframe、flash socket解決跨域問(wèn)題。
后來(lái)出現(xiàn)了CORS-CrossOrigin Resources Sharing,也即跨源資源共享,它定義了一種瀏覽器和服務(wù)器交互的方式來(lái)確定是否允許跨域請(qǐng)求。它是一個(gè)妥協(xié),有更大的靈活性,但比起簡(jiǎn)單地允許所有這些的要求來(lái)說(shuō)更加安全。簡(jiǎn)言之,CORS就是為了讓AJAX可以實(shí)現(xiàn)可控的跨域訪問(wèn)而生的。示意圖如圖1所示。
圖1 跨域請(qǐng)求的訪問(wèn)過(guò)程Fig.1 Cross-domain access to process the request
服務(wù)器端對(duì)于CORS的支持,主要就是通過(guò)設(shè)置Access-Control-Allow-Origin來(lái)進(jìn)行的。它是非常有用的,但同時(shí)也存在風(fēng)險(xiǎn)。因?yàn)樗耆且粋€(gè)盲目的協(xié)議,只是通過(guò)HTTP頭來(lái)控制。因此它可能產(chǎn)生以下一些風(fēng)險(xiǎn):
1)惡意跨域請(qǐng)求
即便頁(yè)面只允許來(lái)自某個(gè)信任網(wǎng)站的請(qǐng)求,但是它也會(huì)收到大量來(lái)自其他域的跨域請(qǐng)求。這些請(qǐng)求有時(shí)可能會(huì)被用于執(zhí)行應(yīng)用層面的DDOS攻擊,并不應(yīng)該被應(yīng)用來(lái)處理。
例如,考慮一個(gè)搜索頁(yè)面。當(dāng)通過(guò)'%'參數(shù)請(qǐng)求時(shí)搜索服務(wù)器會(huì)返回所有的記錄,這可能是一個(gè)計(jì)算繁重的要求。要擊垮這個(gè)網(wǎng)站,攻擊者可以利用XSS漏洞將Javascript腳本注入某個(gè)公共論壇中,當(dāng)用戶訪問(wèn)這個(gè)論壇時(shí),使用它的瀏覽器重復(fù)執(zhí)行這個(gè)到服務(wù)器的搜索請(qǐng)求?;蛘呒词共徊捎每缬蛘?qǐng)求,使用一個(gè)目標(biāo)地址包含請(qǐng)求參數(shù)的圖像元素也可以達(dá)到同樣的目的。如果可能的話,攻擊者甚至可以創(chuàng)建一個(gè)WebWorker執(zhí)行這種攻擊。這會(huì)消耗服務(wù)器大量的資源。
2)HTTP頭只能說(shuō)明請(qǐng)求來(lái)自一個(gè)特定的域,但是并不能保證這個(gè)事實(shí)。因?yàn)镠TTP頭可以被偽造。
所以未經(jīng)身份驗(yàn)證的跨域請(qǐng)求應(yīng)該永遠(yuǎn)不會(huì)被信任。如果一些重要的功能需要暴露或者返回敏感信息,應(yīng)該需要驗(yàn)證Session ID。
3)第三方有可能被入侵
舉一個(gè)場(chǎng)景,F(xiàn)riendFeed通過(guò)跨域請(qǐng)求訪問(wèn) Twitter,F(xiàn)riendFeed請(qǐng)求tweets、提交tweets并且執(zhí)行一些用戶操作,Twitter提供響應(yīng)。兩者都互相相信對(duì)方,所以FriendFeed并不驗(yàn)證獲取數(shù)據(jù)的有效性,Twitter也針對(duì)Twitter開(kāi)放了大部分的功能。
但是當(dāng)如果Twitter被入侵后:
FriendFeed總是從Twitter獲取數(shù)據(jù),沒(méi)有經(jīng)過(guò)編碼或者驗(yàn)證就在頁(yè)面上顯示這些信息。但是Twitter被入侵后,這些數(shù)據(jù)就可能是有害的。
或者FriendFeed被入侵時(shí):
Twitter響應(yīng) FriendFeed的請(qǐng)求,例如發(fā)表 Tweets、更換用戶名甚至刪除賬戶。當(dāng)FriendFeed被入侵后,攻擊者可以利用這些請(qǐng)求來(lái)篡改用戶數(shù)據(jù)。
所以對(duì)于請(qǐng)求方來(lái)說(shuō)驗(yàn)證接收的數(shù)據(jù)有效性和服務(wù)方僅暴露最少最必須的功能是非常重要的。
針對(duì)以上的安全漏洞,可以采取下面的防范手段
1)不信任未經(jīng)身份驗(yàn)證的跨域請(qǐng)求,應(yīng)該首先驗(yàn)證Session ID或者Cookie。2)通過(guò)多種條件屏蔽掉非法的請(qǐng)求,例如HTTP頭、參數(shù)等。3)對(duì)于請(qǐng)求方來(lái)說(shuō)驗(yàn)證接收的數(shù)據(jù)有效性,服務(wù)方僅暴露最少最必須的功能。
postMessage允許每一個(gè)window(包括當(dāng)前窗口、彈出窗口、iframe等)對(duì)象往其他的窗口發(fā)送文本消息,從而實(shí)現(xiàn)跨窗口的消息傳遞。這個(gè)功能是不受同源策略限制的。如果messaging可以接收任何來(lái)源的信息,此頁(yè)面有可能會(huì)被攻擊;另外postMessage不通過(guò)服務(wù)器,如果不經(jīng)過(guò)驗(yàn)證和過(guò)濾,可能成為XSS注入點(diǎn)。例如如下代碼沒(méi)有對(duì)輸入數(shù)據(jù)進(jìn)行驗(yàn)證和清洗,攻擊者完全可以構(gòu)造惡意的data來(lái)注入頁(yè)面DOM,構(gòu)造 XSS 攻擊,形如“>”等。
worker.addEventListener(‘message’,function(e){
document.getElementById(‘test).innerHTML=e.data;
},false);在使用postMessage()時(shí),有兩個(gè)安全問(wèn)題需要注意
1)在接收窗口驗(yàn)證Domain,甚至驗(yàn)證URL,以防止來(lái)自非法頁(yè)面的消息。
2)使用postMessage時(shí)需要對(duì)信息進(jìn)行安全檢查;另外不要使用innerHTML,現(xiàn)代瀏覽器提供了textContent屬性,可以幫助對(duì)HTML標(biāo)簽進(jìn)行過(guò)濾。
WebStorage,可以為用戶創(chuàng)建本地存儲(chǔ),減輕服務(wù)器端的壓力[4-5]。例如LocalStorage可以長(zhǎng)期存儲(chǔ)數(shù)據(jù),極大的解決了之前只能用Cookie來(lái)存儲(chǔ)數(shù)據(jù)的容量小、存取不便、容易被清除的問(wèn)題。Web Storage分為Session Storage和Local Storage。Session Storage關(guān)閉瀏覽器就會(huì)失效,而Local Storage則會(huì)一直存在。Web Storage就像一個(gè)非關(guān)系型數(shù)據(jù)庫(kù),由key-value對(duì)組成,可以通過(guò)JavaScript對(duì)其進(jìn)行操作。
LocalStorage的API都是通過(guò)Javascript提供的,這樣攻擊者可以通過(guò)XSS攻擊竊取信息,例如用戶token或者資料。攻擊者可以用下面的腳本遍歷本地存儲(chǔ)。
[html]view plaincopy
if(localStorage.length){
for(I in localStorage){
console.log(i);
console.log(localStorage.getItem(i));
}
}
現(xiàn)在對(duì)于WebStorage攻擊的防御措施主要是以下兩點(diǎn):
1)數(shù)據(jù)放在合適的作用域里
例如用戶sessionID就不要用LocalStorage存儲(chǔ),而需要放在sessionStorage里。而用戶數(shù)據(jù)不要儲(chǔ)存在全局變量里,而應(yīng)該放在臨時(shí)變量或者局部變量里。
2)不要存儲(chǔ)敏感的信息
因?yàn)槲覀兛傄矡o(wú)法知道頁(yè)面上是否會(huì)存在一些安全性的問(wèn)題,一定不要將重要的數(shù)據(jù)存儲(chǔ)在WebStorage里[6-7]。
HTML5是互聯(lián)網(wǎng)未來(lái)的大勢(shì)所趨。隨著瀏覽器開(kāi)始支持越來(lái)越多的HTML5功能,攻擊面也隨之產(chǎn)生了新的變化。攻擊者可能用HTML5的一些新標(biāo)簽和新功能來(lái)繞過(guò)一些未及時(shí)更新的防御方案。所以開(kāi)發(fā)人員應(yīng)該充分的了解HTML5的新特征,同時(shí)對(duì)應(yīng)用安全性做一個(gè)評(píng)估。最后讓HTML5展現(xiàn)它精彩的魅力,為開(kāi)發(fā)者和廣大的用戶帶來(lái)新的體驗(yàn)。
[1]王榮國(guó).HTML5帶來(lái)的WEB應(yīng)用變革及安全問(wèn)題研究[J].電腦開(kāi)發(fā)與應(yīng)用,2012(7):65-66.WANG Rong-guo.WEB application research HTML5 brings change and security issues[J].Development and Application of Computer,2012(7):65-66.
[2]樹(shù)子.HTML5:看到10年后的互聯(lián)網(wǎng)[J]互聯(lián)網(wǎng)天地,2010(2):74-75.SHU Zi.HTML5:See the Internet 10 years later[J]Internet World,2010(2):74-75.
[3]高攀,施蔚然.深入分析HTML 5在信息安全上的優(yōu)化[J].信息安全與技術(shù),2012(8):83-84,87.GAO Pan,SHI Wei-ran.HTML 5 optimized in-depth analysis on information security[J].Information Security and Technology,2012(8):83-84,87.
[4]劉斌.HTML5-未來(lái)網(wǎng)絡(luò)應(yīng)用的核心技術(shù)研究[J]自動(dòng)化與儀器儀,2010(4):30-31.LIU Bin.HTML5-Future research on core technology network applications[J]Automation and Instrument Instrument,2010(4):30-31.
[5]安靖,劉志.HTML5對(duì)web應(yīng)用產(chǎn)生的影響及安全問(wèn)題研究[J]信息網(wǎng)絡(luò)安全,2011(11):79-80.AN Jing,LIU Zhi.Effects and safety issues arising from HTML5 for web applications[J]Information Network Security,2011(11):79-80.
[6]吳翰清.白帽子講Web安全[M].北京:電子工業(yè)出版社,2012.
[7]周艷平,胡乃平.基于Web的計(jì)算機(jī)控制技術(shù)遠(yuǎn)程仿真系統(tǒng)開(kāi)發(fā)[J].工業(yè)儀表與自動(dòng)化裝置,2010(3):112-115.ZHOU Yan-ping,HU Nai-ping.Development of remote simulation system for computer control technology based on Web[J].Industrial Instrumentation&Automation,2010(3):112-115.