淺談Mashup應(yīng)用的安全分析
出處:陳 豐 發(fā)布于:2011-08-30 21:17:54
摘要: 提出了一種新的安全解決方案,主要采用frame片段標識符技術(shù)在瀏覽器端實現(xiàn)跨域數(shù)據(jù)通信,在此基礎(chǔ)上主要關(guān)注3個安全因素:數(shù)據(jù)保密、身份驗證和數(shù)據(jù)完整。該方案不需要對當(dāng)前的瀏覽器環(huán)境進行任何修改就可實現(xiàn)異源內(nèi)容相互間安全的通信。
在Web2.0時代,一種新型的基于Web的數(shù)據(jù)集成應(yīng)用程序——Mashup,逐漸在Internet上變得越來越流行。在IBM、微軟等企業(yè)的推動下,今后數(shù)年內(nèi)Mashup將成為主流應(yīng)用。即使商業(yè)用戶的IT技術(shù)水平并不高,同樣也可創(chuàng)建符合自身需求的Mashup,并將這些Mashup加以組合,IT產(chǎn)業(yè)的安全性也將隨之大幅提高。
Mashup作為Web2.0上一種代表性的應(yīng)用構(gòu)建方式,已經(jīng)得到了眾多的研究者和開發(fā)者的關(guān)注.目前,針對Mashup的研究主要集中在Mashup數(shù)據(jù)源的轉(zhuǎn)化和集成、系統(tǒng)的設(shè)計、支持工具和平臺、對軟件工程影響、Mashup的質(zhì)量屬性以及在特定領(lǐng)域的應(yīng)用6個方面.在這些研究成果的帶動下,Mashup逐漸變得可用,但在達到"用戶作為開發(fā)者"這一終目標之前,仍然有一些困難需要克服.
1 Mashup(聚合)的基本概念
互聯(lián)網(wǎng)上的Mashup應(yīng)用是指從兩處以上的不同地方獲取數(shù)據(jù),整合到一起而形成的具有統(tǒng)一體驗的互聯(lián)網(wǎng)應(yīng)用或者網(wǎng)站。目前互聯(lián)網(wǎng)中主要有地圖Mashup、視頻和圖像Mashup、搜索和購物Mashup和新聞Mashup 4種類型。
Mashup有內(nèi)容和業(yè)務(wù)兩方面的不同側(cè)重點。從內(nèi)容角度,強調(diào)從內(nèi)容的層面分析數(shù)據(jù)流的整合、流動以與終用戶的交互,通過將不同數(shù)據(jù)源的內(nèi)容進行整合獲得新的業(yè)務(wù)體驗。整體偏重于整合各個數(shù)據(jù)源的內(nèi)容本身。從業(yè)務(wù)角度,強調(diào)從業(yè)務(wù)的層面分析各個業(yè)務(wù)的整合、集成、控制以及參數(shù)傳遞,并給終用戶提供新的業(yè)務(wù)體驗,偏重于關(guān)注各個業(yè)務(wù)的處理功能而非其內(nèi)容數(shù)據(jù)。
Mashup應(yīng)用通常主要有兩種框架結(jié)構(gòu):服務(wù)器端框架和客戶端框架,如圖1所示。
服務(wù)器端框架是一種傳統(tǒng)的聚合方式,首先在服務(wù)器端集成異源的內(nèi)容和服務(wù),然后將集成后的頁面返回到瀏覽器。圖1所示為框架中的集成者(i.com)實際上起到代理的作用,因此,存在一些弊端:
(1)對第三方資源的請求/響應(yīng)都需經(jīng)過i.com,降低了性能;
(2)大量用戶可能導(dǎo)致過度的服務(wù)器負載,i.com易成為瓶頸點,可擴展性差;
(3)i.com易成為黑客的攻擊點。

近年來,隨著Ajax技術(shù)及相關(guān)技術(shù)的發(fā)展,Mashup應(yīng)用出現(xiàn)了客戶端框架,即在瀏覽器端集成異源的內(nèi)容和服務(wù),例如www.housingmaps.com就采用此種框架。同時,內(nèi)容提供者(即第三方)也更愿意提供客戶端的服務(wù),如Google公司提供的Maps API就是一種非常流行的用于客戶端的組件,集成者可以方便地將該組件集成到自己的Mashup應(yīng)用中。由圖1可知,集成者(i.com)將來自異源的內(nèi)容和服務(wù)集成到一個網(wǎng)頁中,集成者和組件、組件與組件之間可以在瀏覽器端進行通信,組件(如a.com)可以使用Ajax技術(shù)異步訪問服務(wù)器來實現(xiàn)網(wǎng)頁局部刷新的效果,給用戶帶來更好的使用體驗?;诖耍疚闹饕芯苛丝蛻舳丝蚣芟碌陌踩珣?yīng)用問題。
2 瀏覽器的安全模型及Mashup的應(yīng)用安全
2.1 同源策略與“全有或全無”模型
同源策略,它是由Netscape提出的一個的安全策略?,F(xiàn)在所有支持JavaScript 的瀏覽器都會使用這個策略。所謂同源是指,域名,協(xié)議,端口相同。當(dāng)一個瀏覽器的兩個tab頁中分別打開來百度和谷歌的頁面,當(dāng)一個百度瀏覽器執(zhí)行一個腳本的時候會檢查這個腳本是屬于哪個頁面的,即檢查是否同源,只有和百度同源的腳本才會被執(zhí)行。該機制將異源的Web應(yīng)用程序分離開,即如果多個瀏覽器窗口、<frame>或<iframe>元素(下文統(tǒng)一用<frame>表示)中的文檔是從不同的服務(wù)器的,則它們無法相互訪問數(shù)據(jù)和腳本,瀏覽器的腳本只被允許訪問來自同源的資源(如DOM和Cookie等資源),并能創(chuàng)建XMLHttpRequest對象異步訪問文檔來源所指服務(wù)器的資源。例如,<frame>A(來自https://a.com)不能訪問<frame>B(來自https://b.com)中的任何DOM元素,反之亦然。來自a.com的腳本也只能創(chuàng)建XMLHttpRequest對象異步訪問a.com,而不能異步訪問b.com。
但上文所提的同源策略有一個例外,文檔中包含的腳本資源文件和圖像文件被視為文檔的組成部分,因此認為與文檔是同源的,即使它們實際上存在于不同的網(wǎng)域中。例如,a.com/service.html中包含<script src=“https://b.com/lib.js”>,雖然lib.js來自b.com,但被認為是a.com/service.html的組成部分,即lib.js與service.html是同源的,都來自a.com,因此lib.js(雖然來自b.com)中的腳本也就能夠訪問a.com/service.html的DOM等資源,并能創(chuàng)建XMLHttpRequest對象異步訪問a.com。
同源策略比較適用于Internet發(fā)展的早期。由于這時很少網(wǎng)站將重要的應(yīng)用邏輯放在瀏覽器端,即使有,這些網(wǎng)站也只限于自己的服務(wù)器而不同第三方打交道,因此,同源策略能有效避免惡意的攻擊。但Internet發(fā)展到今天,情況已有了很大的不同。許多集成者更愿意集成多個來源的內(nèi)容到他們的站點中,為用戶提供定制化和更有附加值的服務(wù)。由前面的分析可知,Mashup的本質(zhì)就是要集成多個來源的內(nèi)容和服務(wù),而同源策略卻是不允許使用來自不同源的內(nèi)容。這導(dǎo)致在開發(fā)Mashup應(yīng)用時只能采用“全有或全無”模型,即站點a.com或者完全不信任來自站點b.com的內(nèi)容,在集成時將來自b.com的內(nèi)容隔離在<frame>元素中;或者完全信任來自站點b.com的腳本,在集成時將來自站點b.com的腳本放到<script>標記中,而這些腳本能完全訪問來自a.com的資源。因此,需要實現(xiàn)一種方法使得瀏覽器能夠支持合法的跨域數(shù)據(jù)訪問,但是無需犧牲終端用戶的安全和對自身數(shù)據(jù)的控制。
2.2 Mashup應(yīng)用安全
Mashup擁有兩個本質(zhì)的特性:互通信能力和安全性?;ネㄐ拍芰κ侵讣烧吲c組件或組件間相互通信的能力。在簡單的Mashup中,可能不需要這種互通信能力,此時可將組件包含在<frame>中,利用同源策略來隔離異源的資源以達到保護的目的。但在越來越趨于復(fù)雜的Mashup應(yīng)用中,集成者與組件間確實需要相互通信的能力。安全性要求來自某源的組件不能存取來自另一源的組件的保密信息,如DOM、cookies等信息。根據(jù)同源策略及“全有或全無”模型,當(dāng)不同來源的組件集成到集成者的同一網(wǎng)頁時,相互之間不能通信,除非采取一些技術(shù)手段來繞過同源策略的限制。結(jié)果通常造成開發(fā)人員被迫必須在安全性和功能之間進行權(quán)衡,導(dǎo)致為了滿足功能而犧牲應(yīng)用的安全性。為此,已經(jīng)存在的Mashup應(yīng)用采用了許多繞開同源策略的措施:
(1)Ajax代理,Mashup服務(wù)器端框架經(jīng)常使用的一種方法[4]。例如,由于同源策略的限制,a.com/service.html中的代碼是不能訪問位于b.com中的某一Web服務(wù)ServiceB的,但可以在a.com中建立新的Web服務(wù)ServiceProxy,則a.com/service.html可通過Ajax訪問a.com/ServiceProxy,而ServiceProxy的功能就是將請求轉(zhuǎn)發(fā)給b.com/ServiceB,由ServiceB產(chǎn)生的響應(yīng)結(jié)果再按原路徑返回給a.com/service.html。
(2)<frame>片段標識符技術(shù),Mashup客戶端框架經(jīng)常使用的方法。通過frame.src屬性的片段標識符(URL中#符號后的部分),使用了頁面腳本和隱藏的<frame>標記之間進行通信以繞過同源策略的限制。
當(dāng)前開發(fā)Mashup時,集成者通常將第三方提供的組件封裝到<frame>標記中,利用同源策略所提供的安全機制,以實現(xiàn)安全的目的。但集成者與組件間通常更需要協(xié)作,筆者認為在瀏覽器端利用<frame>片段標識符技術(shù)進行通信時應(yīng)當(dāng)滿足以下3個主要的安全因素:
(1)數(shù)據(jù)保密。在Mashup應(yīng)用中,經(jīng)常有這樣的場景:如用戶可能在某一網(wǎng)頁中輸入內(nèi)容,并希望此內(nèi)容將只提供給特定的組件,而不被其他第三方截獲?;蛘?,集成者、組件提供者和用戶可能共享一個秘密信息,而不希望此信息被無關(guān)的第三方截獲。因此,在瀏覽器端實現(xiàn)消息傳遞機制時,應(yīng)能保證消息只能被相關(guān)的參與方獲取,而其他無關(guān)的第三方不能截獲到此消息。
(2)身份驗證。參與通信的雙方能夠相互進行身份驗證是瀏覽器端消息傳遞機制另一個很重要的安全要求。在Mashup應(yīng)用中進行身份驗證主要是指通信雙方能驗證彼此的域名。
(3)數(shù)據(jù)完整。數(shù)據(jù)完整是指集成者和組件提供者提供給用戶的內(nèi)容是沒有被攻擊者篡改過的,也即意味著被攻擊者篡改過的消息能被檢測出來。
3 <frame>片段標識符安全通信技術(shù)
3.1 基于<frame>片段標識符的跨域數(shù)據(jù)訪問
<frame>標記能夠在一個HTML文件中封裝和顯示另一個完整的HTML文件。通常稱<frame>所在的網(wǎng)頁為父頁面,而<frame>所包含的網(wǎng)頁(通過向frame.src屬性指定一個URL來確定)稱為子頁面。
目前開發(fā)Mashup應(yīng)用時,集成者通常將組件封裝到<frame>標記中。當(dāng)<frame>的源URL與其父頁面同源時,根據(jù)同源策略,父頁面中的可通過<frame>的DOM訪問它的所有內(nèi)容。同樣,<frame>也可以通過其父頁面的DOM訪問父頁面的所有內(nèi)容。然而,當(dāng)異源時,父頁面不能訪問<frame>的內(nèi)容,<frame>也無法訪問父頁面的內(nèi)容。此時,可利用frame.src屬性的片段標識符(如https://a.com/proxy.html#data_here,#符號后的data_here就是要傳遞的數(shù)據(jù))來實現(xiàn)跨域數(shù)據(jù)訪問。<frame>的外部代碼(如主頁面中的代碼)不能讀取frame.src,但可以重寫frame.src,此即frame.src屬性的只寫特性。這樣,<frame>的外部代碼就可以根據(jù)已知文檔的URL,構(gòu)造“URL+#+要傳遞的數(shù)據(jù)”字符串,指定給frame.src屬性,并將觸發(fā)子頁面的onLoad事件,于是在子頁面的onLoad事件處理程序中可接受父頁面?zhèn)鬟^來的數(shù)據(jù)并決定下一步的操作。如圖2所示,集成者i.com/main.html由于同源策略的限制,在瀏覽器端不能訪問a.com的資源。因此,可通過以下步驟實現(xiàn)i.com/main.html將數(shù)據(jù)data_here傳送給a.com。
(1)i.com/main.html(即父頁面,包含frame1元素)設(shè)置frame1.src=“https://a.com/proxy.html#data_here”。
(2)frame1頁面a.com/proxy.html。通過frame.src來傳遞數(shù)據(jù)可以使用#將數(shù)據(jù)加到frame的URL結(jié)尾來實現(xiàn)。
(3)子頁面(a.com/proxy.html)的onLoad事件被激活。此時,可通過window.location.hash取出i.com/main.html傳遞過來的數(shù)據(jù)data_here。
(4)由于frame1和組件a.com同源,故能相互訪問彼此的資源,即組件a.com也就能訪問i.com/main.html傳過來的數(shù)據(jù)data_here。

當(dāng)組件a.com處理完數(shù)據(jù)data_here后,需要將數(shù)據(jù)data_toI傳遞給父頁面i.com/main.html,也可以通過frame1來傳遞嗎?答案是否定的,frame1不能給它的父頁面?zhèn)鬟f任何消息,因為它們位于不同的源。但是frame1(a.com)可以包含另一個frame2,圖2中,frame1通過設(shè)置frame2.src為父頁面的URL(即i.com)。這時,i.com/main.html包括frame1(域為a.com),而frame1又包含frame2(域為i.com)。同時,可以發(fā)現(xiàn)frame2.parent.parent正是i.com/main.html,且frame2和main.html同源,因此在frame2中可以通過frame2.parent.parent訪問main.html的任何內(nèi)容,調(diào)用main.html中的函數(shù)。實現(xiàn)步驟如下:
(1)組件a.com通過在frame1(a.com/proxy.html)中設(shè)置frame2.src=“https://i.com/proxy.html#data_toI”;
(2)frame2頁面i.com/proxy.html。之后子頁面的onLoad事件被激活,在onLoad事件中可通過window.location.hash取得組件a.com傳過來的數(shù)據(jù)data_toI。
(3)由于frame2(i.com/proxy.html)和i.com/main.html同源,故在frame2中可調(diào)用main.html的receiveFromA函數(shù)將數(shù)據(jù)data_toI傳遞給main.html。
但上述使用<frame>片段標識符的跨域數(shù)據(jù)訪問存在一個安全問題:不確定數(shù)據(jù)的來源。當(dāng)main.html通過frame1.src向組件a.com傳送數(shù)據(jù)data_here時,由于同源策略的安全機制,雖然可以保證數(shù)據(jù)能被組件a.com獲得。但是,當(dāng)組件a.com得到數(shù)據(jù)data_here時,沒有直接的方法得知數(shù)據(jù)的來源。而在大多數(shù)情況下,不確定來源的數(shù)據(jù)是不安全的。因此,必須要有能實現(xiàn)對通信雙方的身份進行驗證的方法克服此安全漏洞。受TCP三次握手的啟發(fā),本文提出一種利用共享密鑰技術(shù)在瀏覽器端實現(xiàn)跨域通信雙方身份驗證的方法,如圖3所示。父頁面i.com/main.html首先產(chǎn)生密鑰SK1,并使用<frame>片段標識符技術(shù)將SK1傳遞給子頁面frame1(a.com/proxy.html)。接收方frame1可通過將密鑰SK1作為數(shù)據(jù)包的一部分傳回main.html以證明接收方frame1確實來源為a.com。但是frame1還需要證明發(fā)送方是來自于i.com,因此,frame1又產(chǎn)生一個新的密鑰SK2,并將SK1和SK2一起傳送給main.html,若main.html能將SK2作為密鑰再傳給frame1就能證明發(fā)送方main.html確實來自i.com。至此,main.html和frame1都擁有了密鑰SK2,故可將SK2作為共享密鑰,并使用它來完成接下來的通信。圖3所示main.html將“SK2+要傳的數(shù)據(jù)”作為數(shù)據(jù)包傳給frame1,frame1將先驗證密鑰是否等于SK2,如果是,則接受傳過來的數(shù)據(jù)。因此,對于惡意的攻擊可以很容易被識別和去除。

3.2 安全分析
從數(shù)據(jù)保密、身份驗證和數(shù)據(jù)完整3個方面來分析上述基于<frame>片段標識符的跨域數(shù)據(jù)訪問方案的安全性。
(1)數(shù)據(jù)保密。利用瀏覽器提供的同源策略限制和frame.src的只寫特性來實現(xiàn)數(shù)據(jù)保密性。在父頁面和<frame>之間傳送的數(shù)據(jù)不會被父頁面上其他的DOM元素看到,因為<frame>與父頁面處在不同的源。而且數(shù)據(jù)不出現(xiàn)在瀏覽器緩存中,數(shù)據(jù)也不會跨過網(wǎng)絡(luò),因此可以認為數(shù)據(jù)包只能被接收的<frame>或來自a.com的其它頁面觀察到。
(2)身份驗證。圖3中利用共享密鑰的技術(shù)能保證瀏覽器客戶端跨域通信雙方身份的驗證。frame1只有當(dāng)其將父頁面?zhèn)鬟^來的密鑰SK1再傳回父頁面時,才能讓它的身份得到驗證;類似的,父頁面也只有將密鑰SK2傳回frame1時,才能驗證它的身份。之后,通過利用父頁面和frame1的共享密鑰SK2來保證雙方通信的機密性。
(3)數(shù)據(jù)完整。攻擊者篡改過的數(shù)據(jù)能被檢測出來。要篡改通信的數(shù)據(jù),攻擊者需要知道共享密鑰SK2,否則在目的地,傳過來的數(shù)據(jù)包將被拒絕并被丟棄。因此,沒有經(jīng)過身份驗證的組件是不能篡改數(shù)據(jù)的。
當(dāng)前所有瀏覽器端所實現(xiàn)的安全模型是同源策略,其導(dǎo)致了異源內(nèi)容間只能是“完全信任”或“完全不信任”的結(jié)果。隨之帶來的問題是:Mashup不能在實現(xiàn)功能性需求的同時也能很好地解決安全問題。因此,需要瀏覽器實現(xiàn)一種新的安全模型,使得瀏覽器能夠支持合法的跨域數(shù)據(jù)訪問,而無需犧牲終端用戶的安全。但是,主流瀏覽器要實現(xiàn)新的安全模型并在業(yè)內(nèi)普遍使用需要幾年的時間,同時一些研究者提出的解決方案中或者要求改進當(dāng)前的瀏覽器環(huán)境;或者不能提供一個靈活和安全的點到點的域間通信機制[5-6]。本文提出了一種新的域間通信機制,它不需要對當(dāng)前的瀏覽器環(huán)境進行任何修改就可適用,并且主要考慮了3個安全因素:數(shù)據(jù)保密、身份驗證和數(shù)據(jù)完整。在不遠的將來,通過不斷改善瀏覽器技術(shù),及增加新的Web標準使Mashup更加安全,Mashup方式也將會得到更廣泛的應(yīng)用。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 工業(yè)5G技術(shù)在智能制造中的應(yīng)用與實踐解析2025/12/31 10:57:21
- 工業(yè)以太網(wǎng)交換機選型與現(xiàn)場應(yīng)用技術(shù)指南2025/12/18 10:48:14
- 無線傳輸電路基礎(chǔ),射頻前端設(shè)計、天線匹配與鏈路預(yù)算計算2025/10/27 13:55:50
- ASK 解調(diào)的核心要點與實現(xiàn)方式2025/9/5 16:46:17
- 雙偶極子天線:結(jié)構(gòu)、特性與應(yīng)用全解析2025/9/3 10:29:21









