專利名稱:在未修改瀏覽器上保護(hù)Web應(yīng)用的跨域交互的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及Web應(yīng)用,并且具體而言涉及一種用于在未修改瀏覽器上保護(hù) Web應(yīng)用的跨域交互的方法和系統(tǒng)。
背景技術(shù):
現(xiàn)今,在Web應(yīng)用領(lǐng)域,mashup逐漸成為一種重要的Web應(yīng)用技術(shù)。術(shù)語(yǔ)"mashup" 指的是一種Web應(yīng)用,通過(guò)該應(yīng)用可以把來(lái)自不止一個(gè)源的數(shù)據(jù)結(jié)合到單一集成工具中, 從而創(chuàng)建一個(gè)新穎和獨(dú)特的Web服務(wù),而該服務(wù)之前沒(méi)有被任一源所提供。比起單一源的 服務(wù)和數(shù)據(jù),mashup提供了更多價(jià)值。Mashup的一個(gè)示例是Google M即s。對(duì)于企業(yè)來(lái)說(shuō), 利用mashup可以實(shí)現(xiàn)企業(yè)應(yīng)用與外部應(yīng)用的結(jié)合,以及內(nèi)部數(shù)據(jù)與外部數(shù)據(jù)的結(jié)合。
Mashup是一種創(chuàng)建應(yīng)用的便利方式,其模糊了開(kāi)發(fā)者和用戶之間的界限。通過(guò) mashup,用戶可以隨需地創(chuàng)建其應(yīng)用。存在幾種不同的mashup類(lèi)型。 一些網(wǎng)站可以暴露 其JavaScript API (應(yīng)用編程接口 ),從而用戶可以利用該API來(lái)開(kāi)發(fā)強(qiáng)大的應(yīng)用,例如 Google Maps的API。還存在一種更靈活的mashup方式,例如ScissorsHands,其可以從 不同web應(yīng)用中剪切任意HTML、 JavaScript和ess (Cascading Style Sheets,層疊樣式 表)代碼段,并將它們集成為一個(gè)新的應(yīng)用。除了這些方式之外,還存在一種mashup方法, 例如Netvibes、 Google、以及Yahoo,其提供一個(gè)平臺(tái)以及被稱為widget (窗口小部件)或 gadget(小配件)的組件。用戶可以把這些組件中的某些或者所有組件一起放在平臺(tái)上,并 且可以在該平臺(tái)的指導(dǎo)方針下開(kāi)發(fā)新組件。 Mashup的實(shí)現(xiàn)基于某些技術(shù),例如動(dòng)態(tài)HTML、 JavaScript以及Ajax。這些技術(shù)針 對(duì)開(kāi)發(fā)更強(qiáng)大的應(yīng)用和更友好的用戶界面提供了很大的靈活性。然而,相應(yīng)地,這些技術(shù)也 引發(fā)了許多安全問(wèn)題,其中的主要兩種安全問(wèn)題為 1)跨站腳本攻擊(Cross-Site Scripting, XSS) 。 XSS意味著惡意攻擊者在Web 頁(yè)面里插入惡意HTML代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中的HTML代碼會(huì)被執(zhí)行,從而達(dá) 到惡意用戶的特殊目的。由此,惡意代碼可以盜取系統(tǒng)中存儲(chǔ)的cookie、訪問(wèn)受限信息、或 者重寫(xiě)頁(yè)面的一部分。這些攻擊可能威脅到用戶的隱私以及其它內(nèi)容提供者的興趣。
2)跨站請(qǐng)求偽造(Cross-Site Request Forgeries, CSRF) 。 CSRF通過(guò)偽裝來(lái)自 受信任用戶的請(qǐng)求來(lái)利用受信任的網(wǎng)站。當(dāng)用戶登錄到一項(xiàng)服務(wù)時(shí),其中的惡意代碼可以 攻擊服務(wù)器,因?yàn)榉?wù)器認(rèn)為該連接是來(lái)自于可信的客戶端代碼。CSRF的常見(jiàn)特性在于 依靠用戶標(biāo)識(shí)危害網(wǎng)站;利用網(wǎng)站對(duì)用戶標(biāo)識(shí)的信任;以及欺騙用戶的瀏覽器發(fā)送HTTP請(qǐng) 求給目標(biāo)站點(diǎn)。 不幸的是,到目前為止,針對(duì)上述的mashup安全問(wèn)題還沒(méi)有很好的解決方案。具 體而言,mashup的混合(hybrid)特性使得Web應(yīng)用的功能性和安全性具有沖突。Mashup 可以采用來(lái)自不同主機(jī)的代碼、數(shù)據(jù)和內(nèi)容,從而破壞了基本的web安全模型,所述模型限 制瀏覽器不能在一個(gè)頁(yè)面中訪問(wèn)不同主機(jī)。 當(dāng)前的瀏覽器安全機(jī)制采取的方式是要么完全信任,要么完全不信任。也就是
6說(shuō),對(duì)于一個(gè)域而言,要么完全信任其中的腳本、代碼、服務(wù)等,要么完全不信任它們?;?對(duì)瀏覽器的限制提出了被稱為同源策略(Same-Origin Policy, SOP)的安全機(jī)制。SOP僅 允許一個(gè)頁(yè)面訪問(wèn)來(lái)自同一域的其它內(nèi)容。JavaScript對(duì)象XMLHttpRequest也在SOP的 控制之下。盡管存在某些方法(Ajax代理、動(dòng)態(tài)腳本標(biāo)簽、以及瀏覽器擴(kuò)展和插件)可以避 免SOP,但是這些方法在帶來(lái)更多功能性的同時(shí)也帶來(lái)了安全問(wèn)題。 出于安全原因,作為默認(rèn)的mashup模型,Google將每個(gè)gadget封裝在iFrame 中,以便確保某一個(gè)gadget中的惡意代碼無(wú)法攻擊其它gadget。但是,該模型同樣限制了 gadget之間的通信。并且,iFrame對(duì)于所傳遞信息的長(zhǎng)度有限制。對(duì)于mashup來(lái)說(shuō),其不 便于融合來(lái)自各個(gè)源的不同應(yīng)用。 瀏覽器擴(kuò)展和插件的實(shí)現(xiàn)很大程度上取決于客戶端的操作??蛻舳说挠脩艨赡軣o(wú) 法將瀏覽器擴(kuò)展和插件正確地安裝,或者可能在安裝之后破壞其功能。因此,這是一種不可 靠的解決方案。 從上述內(nèi)容可以看出,在現(xiàn)有技術(shù)中,在Web應(yīng)用的跨域交互方面,還不存在可以 同時(shí)獲得強(qiáng)大的功能以及足夠的安全性的解決方案。當(dāng)前的安全模型導(dǎo)致了這樣的情形 如果需要多樣的和可擴(kuò)展的功能,則安全性通常被犧牲。如果避開(kāi)了 SOP,并且允許來(lái)自第 三方組件的訪問(wèn),則該訪問(wèn)將能夠訪問(wèn)當(dāng)前域的所有內(nèi)容。由此,在本領(lǐng)域中存在對(duì)于一種 方法和系統(tǒng)的需要,其可以在未修改瀏覽器上保護(hù)Web應(yīng)用的跨域交互,從而同時(shí)兼顧功 能性和安全性。
發(fā)明內(nèi)容
在本發(fā)明的第一方面中,提出了一種用于在未修改瀏覽器上保護(hù)Web應(yīng)用的跨域 交互的系統(tǒng),所述系統(tǒng)包括 安全框架裝置,其中所述安全框架裝置由瀏覽器創(chuàng)建; 其中,所述安全框架裝置進(jìn)一步包括 組件創(chuàng)建器,用于創(chuàng)建來(lái)自多個(gè)源的組件;以及 監(jiān)督模塊,用于監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之 后各個(gè)組件執(zhí)行的調(diào)用和交互操作。 在本發(fā)明的第二方面中,提出了一種用于在未修改瀏覽器上保護(hù)Web應(yīng)用的跨域 交互的方法,其中所述Web應(yīng)用包括來(lái)自多個(gè)源的多個(gè)組件,所述方法包括
由瀏覽器創(chuàng)建安全框架裝置; 由所述安全框架裝置創(chuàng)建來(lái)自多個(gè)源的組件;以及 由所述安全框架裝置監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件 創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作。 根據(jù)本發(fā)明的實(shí)施例的所述系統(tǒng)和方法可以禁止來(lái)自組件的任意潛在的惡意操 作,并且提供安全解決方案來(lái)監(jiān)視和控制這些操作,同時(shí)兼顧功能性和安全性。
在附帶的權(quán)利要求中闡明了被認(rèn)為是本發(fā)明新穎特性的特征。然而,通過(guò)參考以 下結(jié)合附圖的說(shuō)明性實(shí)施例的詳細(xì)描述,將最好地理解本發(fā)明本身以及其優(yōu)選使用模式、
7另外的目的和優(yōu)點(diǎn),在附圖中 圖1描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的一種用于在未修改瀏覽器上保護(hù)Web應(yīng)用 的跨域交互的系統(tǒng)的整體體系結(jié)構(gòu)以及操作方式的示意性框圖; 圖2描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的安全框架裝置的結(jié)構(gòu)的示意性框圖;
圖3描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的單個(gè)組件的結(jié)構(gòu)的示意性框圖;以及
圖4描述了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種用于在未修改瀏覽器上保護(hù)Web應(yīng)用的 跨域交互的方法的示意性流程圖。 需要注意,在全體附圖中,相同或相似的標(biāo)號(hào)指代的是相同或相似的單元或組件。
具體實(shí)施例方式
在下文中將結(jié)合附圖對(duì)本發(fā)明的示范性實(shí)施例進(jìn)行描述。為了清楚和簡(jiǎn)明起見(jiàn), 在說(shuō)明書(shū)中并未描述實(shí)際實(shí)現(xiàn)方式的所有特征。然而,應(yīng)該了解,在開(kāi)發(fā)任何這種實(shí)際實(shí)施 例的過(guò)程中必須做出很多實(shí)現(xiàn)方式所特定的決定,以便實(shí)現(xiàn)開(kāi)發(fā)人員的具體目標(biāo),例如符 合與系統(tǒng)及業(yè)務(wù)相關(guān)的那些限制條件,其中,這些限制條件會(huì)隨著實(shí)施方式的不同而改變。 此外,還應(yīng)該了解,雖然開(kāi)發(fā)工作有可能是非常復(fù)雜和費(fèi)時(shí)的,但對(duì)得益于這個(gè)公開(kāi)內(nèi)容的 本領(lǐng)域技術(shù)人員來(lái)說(shuō),這種開(kāi)發(fā)工作僅僅是例行的任務(wù)。 此外,還需要說(shuō)明的一點(diǎn)是,為了避免因不必要的細(xì)節(jié)而混淆了本發(fā)明,在附圖中 僅僅示出了與根據(jù)本發(fā)明的方案密切相關(guān)的裝置結(jié)構(gòu)和/或處理步驟,而省略了與本發(fā)明 關(guān)系不大的其它細(xì)節(jié)。 盡管在本說(shuō)明書(shū)的上下文中以mashup為例來(lái)說(shuō)明本發(fā)明的實(shí)施例以及應(yīng)用方 式,但是本發(fā)明的方案同樣適用于其它具有類(lèi)似特征的、需要在瀏覽器上執(zhí)行跨域交互的 Web應(yīng)用。 參見(jiàn)圖l,描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的一種用于在未修改瀏覽器上保護(hù) Web應(yīng)用的跨域交互的系統(tǒng)的整體體系結(jié)構(gòu)以及操作方式的示意性框圖。如圖l所示,客 戶端瀏覽器100通過(guò)網(wǎng)絡(luò)與具有組件代碼/腳本的多個(gè)服務(wù)器140以及具有安全框架裝置 源代碼的服務(wù)器150進(jìn)行通信,其中所述網(wǎng)絡(luò)例如可以是因特網(wǎng)或者內(nèi)聯(lián)網(wǎng)。根據(jù)本發(fā)明
的一個(gè)實(shí)施例,當(dāng)瀏覽器ioo準(zhǔn)備在其中創(chuàng)建組件時(shí),其首先向具有安全框架裝置源代碼
的服務(wù)器150請(qǐng)求安全框架裝置的源代碼(包括HTML和JavaScript)。在獲得源代碼之 后,瀏覽器100即時(shí)地運(yùn)行該代碼,從而在創(chuàng)建任意組件之前創(chuàng)建安全框架裝置110。接著 安全框架裝置IIO請(qǐng)求組件清單文件并解析該文件。根據(jù)該清單文件,將由安全框架裝置 110創(chuàng)建各個(gè)組件120。由于各個(gè)組件來(lái)自不同的服務(wù)器140,因此安全框架裝置110可以 基于要?jiǎng)?chuàng)建的組件從相應(yīng)的服務(wù)器140獲得該組件的代碼/腳本。 安全框架裝置110可以提供監(jiān)督模塊,用于從多個(gè)方面監(jiān)督和控制在組件創(chuàng)建期 間執(zhí)行的腳本和代碼以及各個(gè)組件120執(zhí)行的調(diào)用和交互操作。例如,安全框架裝置110可 以將每個(gè)組件隔離,限制組件對(duì)DOM(Document Object Model,文檔對(duì)象模型)樹(shù)節(jié)點(diǎn)的訪 問(wèn),監(jiān)督組件之間的調(diào)用,監(jiān)督瀏覽器和遠(yuǎn)程資源之間的通信,以及過(guò)濾并覆蓋(wrap)潛 在危險(xiǎn)的對(duì)象和功能。所述安全框架裝置110還可以被用于匹配預(yù)定的安全策略以及/或 者在出現(xiàn)不安全因素的時(shí)候警告用戶。 為了實(shí)現(xiàn)上述目的,安全框架裝置110在創(chuàng)建組件之前過(guò)濾組件的源代碼,以消除或替換危險(xiǎn)的關(guān)鍵字,所述關(guān)鍵字可以指示出可以訪問(wèn)D0M樹(shù)節(jié)點(diǎn)或cookie、與遠(yuǎn)程服 務(wù)器進(jìn)行通信、以及執(zhí)行腳本的對(duì)象和功能。并且,安全框架裝置iio禁用所創(chuàng)建的組件的 初始功能,并相應(yīng)地提供覆蓋的代理功能。在組件被創(chuàng)建之后,組件可以使用由安全框架裝 置110提供的經(jīng)監(jiān)督和覆蓋的代碼功能來(lái)實(shí)現(xiàn)對(duì)其它組件或者外部的訪問(wèn)或調(diào)用。
參見(jiàn)圖2描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的安全框架裝置110的結(jié)構(gòu)的示意性框 圖。安全框架裝置110與其所創(chuàng)建的多個(gè)組件120進(jìn)行通信,從而監(jiān)督和控制它們的調(diào)用 和通信操作。如圖所示,安全框架裝置110可以包括組件創(chuàng)建器210、組件儲(chǔ)存庫(kù)220、調(diào)用 代理230、惡意腳本過(guò)濾器240、Ajax請(qǐng)求代理250、D0M樹(shù)代理260、以及cookie代理270。
為了支持組件之間的通信能力,各個(gè)組件應(yīng)當(dāng)向其它組件暴露某些功能。然而,如 果一個(gè)組件可以獲得另一組件的實(shí)例,則可能存在風(fēng)險(xiǎn)。為了解決這一問(wèn)題,根據(jù)本發(fā)明的 實(shí)施例,所有組件必須由安全框架裝置110創(chuàng)建。在創(chuàng)建過(guò)程中,安全框架裝置110為所創(chuàng) 建的每一組件生成一個(gè)唯一的隨機(jī)串,其被稱為該組件的權(quán)標(biāo)。安全框架裝置110和該組 件分別保存該權(quán)標(biāo)作為標(biāo)識(shí)符。此權(quán)標(biāo)用于由安全框架裝置iio確定組件的身份,從而確 保了其它組件無(wú)法冒充該組件進(jìn)行調(diào)用。并且對(duì)該組件的引用只能被保存在安全框架裝置 110中,從而只有安全框架裝置110才可以調(diào)用所述引用。這樣,具有惡意代碼的組件就無(wú) 法攻擊其它組件。 組件創(chuàng)建器210用于根據(jù)其中的組件清單文件212來(lái)創(chuàng)建組件,為所創(chuàng)建的每個(gè) 組件120生成一個(gè)隨機(jī)串作為該組件的權(quán)標(biāo),以及將所創(chuàng)建的權(quán)標(biāo)310和安全框架裝置引 用引擎320放置在組件120中。關(guān)于組件120的結(jié)構(gòu),將在下文中結(jié)合圖3進(jìn)行描述。
在一個(gè)組件120被創(chuàng)建之后,它的引用、權(quán)標(biāo)、主機(jī)、以及在清單文件212中聲明的 組件名稱被存儲(chǔ)在組件儲(chǔ)存庫(kù)220中。當(dāng)該組件不再有用而被去除時(shí),安全框架裝置110 將把與其有關(guān)的信息從組件儲(chǔ)存庫(kù)220中移除。 為了支持組件之間的合法通信能力,安全框架裝置110提供了調(diào)用代理230,用于 監(jiān)視并控制組件之間進(jìn)行的外部調(diào)用。調(diào)用代理230可以檢查組件進(jìn)行的調(diào)用是否合法。 如果否,則調(diào)用代理230可以拒絕該調(diào)用。 當(dāng)調(diào)用代理230從一組件120接收到調(diào)用時(shí),它首先通過(guò)權(quán)標(biāo)來(lái)認(rèn)證調(diào)用者,然后 通過(guò)調(diào)用代理230中的安全檢查器232來(lái)檢查安全策略233 (安全策略233保存在安全檢 查器232中),以及決定是否允許該調(diào)用。如果該調(diào)用提供的調(diào)用參數(shù)合法,則允許該調(diào)用。 接著調(diào)用代理230從組件儲(chǔ)存庫(kù)220中定位被調(diào)用者,從而進(jìn)行調(diào)用的組件可以執(zhí)行其調(diào) 用功能。如果該調(diào)用提供的調(diào)用參數(shù)不合法,或者該調(diào)用不符合安全策略233,則拒絕該調(diào) 用,并且可選地可以通知用戶。 調(diào)用代理230的功能例如可以具有這樣的格式 function invoke (/ * String * /caller—identifier, / * String * /target— componet, / * String * /f皿ction—n咖e, / * Arrays * /parameters)
該功能具有四個(gè)參數(shù)具有串格式的調(diào)用者標(biāo)識(shí)符(權(quán)標(biāo))、目標(biāo)組件、要調(diào)用的 功能名稱、以及具有陣列格式的其它參數(shù)?;诖苏{(diào)用代理230,組件可以在安全框架裝置 110的監(jiān)督下進(jìn)行調(diào)用和通信。 注意,在某些情形中,用于調(diào)用其它組件功能的HTML標(biāo)簽的腳本是由開(kāi)發(fā)者事先 編寫(xiě)的,例如onclick =" component, execute ()",該腳本在編寫(xiě)時(shí)并不知道某些參數(shù)(例
9如權(quán)標(biāo))的值。為了解決此問(wèn)題,開(kāi)發(fā)者可以用一個(gè)占位符來(lái)替換該參數(shù),而當(dāng)組件被創(chuàng)建 時(shí),由安全框架裝置110用真實(shí)的參數(shù)值來(lái)替換該占位符。 Ajax請(qǐng)求代理250用于監(jiān)督并控制組件120的Ajax請(qǐng)求,從而禁止直接的跨站 Ajax請(qǐng)求。Ajax請(qǐng)求代理250可以檢查組件的腳本,以過(guò)濾"XMLHTTPRequest"關(guān)鍵字,從 而使得組件無(wú)法通過(guò)XMLHTTPRequest對(duì)象直接發(fā)送Ajax請(qǐng)求,從而僅允許組件120訪問(wèn) 其自己的主機(jī)。當(dāng)一個(gè)組件啟動(dòng)Ajax請(qǐng)求時(shí),Ajax請(qǐng)求代理250可以檢查該請(qǐng)求中的目 標(biāo)主機(jī)是否是該組件所屬的主機(jī),即,組件與該主機(jī)屬于相同域。如果是,則該Ajax請(qǐng)求可 以被允許。如果否,則禁止該請(qǐng)求的發(fā)送。所述檢查機(jī)制類(lèi)似于對(duì)于在組件之間的通信的 檢查。 另外,與攻擊JavaScript對(duì)象相比,直接攻擊頁(yè)面文檔是一種更流行的方法。在 現(xiàn)有技術(shù)的Web應(yīng)用交互中,惡意代碼可以從DOM樹(shù)盜取信息,以及甚至重寫(xiě)DOM樹(shù)的某些 節(jié)點(diǎn)。JavaScript腳本可以通過(guò)document對(duì)象或DOM樹(shù)中的其它節(jié)點(diǎn)來(lái)訪問(wèn)DOM樹(shù)。而 實(shí)際上,JavaScript必須通過(guò)document對(duì)象或者HTML標(biāo)簽中的this對(duì)象來(lái)獲得DOM樹(shù) 的節(jié)點(diǎn)。從而,安全框架裝置110提供了 D0M樹(shù)代理260,用于監(jiān)督并控制組件對(duì)于D0M樹(shù) 的訪問(wèn)。 DOM樹(shù)代理260用于監(jiān)督并控制組件對(duì)于DOM樹(shù)的訪問(wèn),從而禁止直接的DOM樹(shù)訪 問(wèn)。DOM樹(shù)代理260可以在組件被創(chuàng)建的時(shí)候根據(jù)組件的要求將某些經(jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn) 提供給該組件,同時(shí)禁止組件對(duì)其它DOM樹(shù)節(jié)點(diǎn)的訪問(wèn),并且在組件需要的時(shí)候向其提供 其它經(jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)。所述經(jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)具有用于操作真實(shí)的DOM樹(shù)節(jié)點(diǎn)的某 些功能。所述代理260將監(jiān)視組件對(duì)于DOM樹(shù)節(jié)點(diǎn)的訪問(wèn),從而禁止了組件直接對(duì)DOM樹(shù) 的訪問(wèn),以便將該訪問(wèn)限制在該組件所在的域中。 注意,由于向組件提供的節(jié)點(diǎn)是經(jīng)覆蓋的節(jié)點(diǎn),組件根本無(wú)法獲得真實(shí)節(jié)點(diǎn)。其原 因在于,只要組件能夠訪問(wèn)真實(shí)的DOM樹(shù)節(jié)點(diǎn),它將可以遍歷整個(gè)DOM樹(shù)中的任意其它節(jié) 點(diǎn)。除了使用DOM樹(shù)代理260來(lái)獲得覆蓋DOM節(jié)點(diǎn)之外,組件還可以在其源節(jié)點(diǎn)中聲明需 要某些預(yù)先覆蓋的DOM節(jié)點(diǎn),從而安全框架裝置110將在組件的創(chuàng)建期間將這些覆蓋節(jié)點(diǎn) 提供給組件作為組件的私有參數(shù)。這樣,組件可以在無(wú)需向DOM樹(shù)代理260檢索這些節(jié)點(diǎn) 的情況下操作這些節(jié)點(diǎn)。進(jìn)一步地,根據(jù)本發(fā)明的實(shí)施例,由于所有組件是由安全框架裝置 IIO所創(chuàng)建,所以安全框架裝置IIO可以掃描組件的腳本和HTML代碼,并且將潛在危險(xiǎn)的關(guān) 鍵字(例如document、 this)清除,或者在發(fā)現(xiàn)這些關(guān)鍵字之后通知用戶。
Cookie代理270監(jiān)視并控制組件對(duì)cookie的訪問(wèn),從而僅允許組件訪問(wèn)其自己 的cookie。由于安全框架裝置110需要過(guò)濾document對(duì)象,組件無(wú)法直接訪問(wèn)cookie對(duì) 象。類(lèi)似于DOM樹(shù)代理260, cookie代理270可以監(jiān)督組件對(duì)cookie的訪問(wèn),從而確保組 件僅可以訪問(wèn)其自己的cookie。 Cookie代理270還可以用于檢查網(wǎng)絡(luò)釣魚(yú)(phishing)鏈 接。網(wǎng)絡(luò)釣魚(yú)是指以電子郵件、偽裝金融機(jī)構(gòu)網(wǎng)頁(yè)、間諜軟件等方式詐騙用戶的個(gè)人信息, 意圖引誘用戶給出敏感信息(如用戶名、口令、帳號(hào)ID、ATM PIN碼或信用卡詳細(xì)信息等), 從而利用偷來(lái)的信息假冒用戶身份。 惡意腳本過(guò)濾器240用于在組件創(chuàng)建器210創(chuàng)建組件之前檢查組件的腳本/代 碼,以及檢查在組件間傳遞的腳本、HTML、CSS代碼,以便從中挑出潛在的惡意代碼。所述檢 查是通過(guò)掃描源代碼串以找到匹配的關(guān)鍵字。所述關(guān)鍵字可以指示出可以訪問(wèn)DOM樹(shù)節(jié)點(diǎn)
10或cookie、與遠(yuǎn)程服務(wù)器進(jìn)行通信、以及執(zhí)行腳本的對(duì)象和功能。所述關(guān)鍵字包括但不限 于"document,,、"this,,、 "XMLHTTPRequest,,、"eval ,,、"window,,、" 1ocation,,、"history,,、 "parent"、"self"。如果發(fā)現(xiàn)所述關(guān)鍵字,則將所述關(guān)鍵字屏蔽,或者可選地通知用戶。
以下是關(guān)于過(guò)濾"eval"關(guān)鍵字的原因。包括本發(fā)明的實(shí)施例在內(nèi), 一些安全機(jī)制 的實(shí)現(xiàn)基于過(guò)濾某些關(guān)鍵字。然而,通過(guò)使用eval功能可以避開(kāi)過(guò)濾。例如,eval功能可 以將關(guān)鍵字"document"拆成"do"+ "c咖ent",從而通常的安全機(jī)制的過(guò)濾功能將失效。因 此,從安全的角度考慮,eval功能是一種很危險(xiǎn)的功能。由此,惡意腳本過(guò)濾器240可以掃 描用于創(chuàng)建組件的腳本和HTML代碼以及組件所傳遞的腳本和代碼。當(dāng)發(fā)現(xiàn)"eval"關(guān)鍵字 時(shí),將其屏蔽??商鎿Q地,在本發(fā)明的另一實(shí)施例中,可以提供一種覆蓋的eval功能,其用 于替換初始的eval功能,例如"framework, eval"。該功能可以將被拆開(kāi)的串拼湊在一起, 從而便于惡意腳本過(guò)濾器240進(jìn)行檢查。 在上述五種代理組件中,調(diào)用代理230、 D0M樹(shù)代理260、 Cookie代理270解決了 XSS風(fēng)險(xiǎn),Ajax請(qǐng)求代理250去除了 CSRF風(fēng)險(xiǎn),以及惡意腳本過(guò)濾器240確保這些安全機(jī) 制不會(huì)被避開(kāi)。總之,根據(jù)本發(fā)明的實(shí)施例的所述系統(tǒng)可以禁止來(lái)自組件的任意潛在的惡 意操作,并且提供安全解決方案來(lái)監(jiān)視和控制這些操作。 以上是對(duì)于根據(jù)本發(fā)明一個(gè)實(shí)施例的安全框架裝置110的結(jié)構(gòu)的具體描述。以下 將參考圖3描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的單個(gè)組件120的結(jié)構(gòu)的示意性框圖。組件 120類(lèi)似于gadget或widget,其是獨(dú)立的功能單元。組件120可以包含某些HTML段、腳本 和css。不同平臺(tái)可以具有不同組件開(kāi)發(fā)指導(dǎo)原則。 一般而言,HTML和CSS描述組件的用 戶界面,而腳本保存組件的業(yè)務(wù)邏輯。組件120可以包括組件權(quán)標(biāo)310、安全框架裝置引用 引擎320、以及一些覆蓋D0M節(jié)點(diǎn)330。權(quán)標(biāo)310是由安全框架裝置110 (圖1)在創(chuàng)建該 組件120的時(shí)候所生成的一個(gè)隨機(jī)標(biāo)識(shí)符,其被用于由安全框架裝置110認(rèn)證調(diào)用者(組 件)的身份,從而確保了其它組件無(wú)法冒充該組件進(jìn)行調(diào)用。即,當(dāng)該組件120想要執(zhí)行調(diào) 用時(shí),需要提供它的權(quán)標(biāo)310,安全框架裝置110將通過(guò)該權(quán)標(biāo)310來(lái)驗(yàn)證進(jìn)行調(diào)用的組件 是否是合法的組件。 安全框架裝置引用引擎320與安全框架裝置110相交互,用于監(jiān)視和控制組件120 的調(diào)用和通信,例如調(diào)用其它組件、訪問(wèn)DOM節(jié)點(diǎn)、對(duì)所屬主機(jī)提出Ajax請(qǐng)求、訪問(wèn)cookie、 以及某些其它功能。覆蓋DOM節(jié)點(diǎn)330對(duì)應(yīng)于系統(tǒng)的DOM樹(shù)340中與該組件120對(duì)應(yīng)的 DOM子樹(shù)350中的特定DOM節(jié)點(diǎn),所述DOM節(jié)點(diǎn)具有用于操作真實(shí)的DOM節(jié)點(diǎn)的某些功能。 這些特定DOM節(jié)點(diǎn)330是該組件所需的,其用于由組件120進(jìn)行操作,且組件120僅可以操 作這些對(duì)應(yīng)的DOM節(jié)點(diǎn)。如果組件120需要對(duì)DOM樹(shù)中的另一其它DOM節(jié)點(diǎn)進(jìn)行操作,它 需要向安全框架裝置110請(qǐng)求獲得與該節(jié)點(diǎn)相對(duì)應(yīng)的覆蓋D0M節(jié)點(diǎn)330,從而在獲得安全框 架裝置110許可的情況下,組件120可以操作該DOM節(jié)點(diǎn)。組件對(duì)于DOM樹(shù)節(jié)點(diǎn)的訪問(wèn)也 將被監(jiān)視,從而禁止了組件直接對(duì)DOM樹(shù)的訪問(wèn),以便將該訪問(wèn)限制在該組件所在的域中。
以上參考
了描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的一種用于在未修改瀏覽 器上保護(hù)Web應(yīng)用的跨域交互的系統(tǒng)。在同一發(fā)明構(gòu)思下,還提出了根據(jù)本發(fā)明一個(gè)實(shí)施 例的一種用于在未修改瀏覽器上保護(hù)Web應(yīng)用的跨域交互的方法。 圖4描述了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種用于在未修改瀏覽器上保護(hù)Web應(yīng)用的 跨域交互的方法的示意性流程圖。所述Web應(yīng)用可以包括來(lái)自多個(gè)源的多個(gè)組件。如圖4所示,在框410,由瀏覽器創(chuàng)建安全框架裝置。具體而言,所述創(chuàng)建步驟進(jìn)一步包括由瀏覽 器向具有安全框架裝置源代碼的服務(wù)器請(qǐng)求安全框架裝置的源代碼;以及即時(shí)地運(yùn)行所述 源代碼以創(chuàng)建所述安全框架裝置。 在安全框架裝置被成功創(chuàng)建之后,在框420,由所述安全框架裝置創(chuàng)建來(lái)自多個(gè) 源的組件。具體而言,所述創(chuàng)建步驟進(jìn)一步包括基于要?jiǎng)?chuàng)建的組件從相應(yīng)的服務(wù)器獲得 該組件的腳本/代碼;為所創(chuàng)建的每個(gè)組件生成一個(gè)隨機(jī)串作為該組件的權(quán)標(biāo),所述權(quán)標(biāo) 用于由所述安全框架裝置確定組件的身份;將所創(chuàng)建的權(quán)標(biāo)和一個(gè)安全框架裝置引用引擎 放置在組件中;以及在所述安全框架裝置中存儲(chǔ)所創(chuàng)建的每個(gè)組件的引用、權(quán)標(biāo)、主機(jī)、以 及組件名稱。并且,在創(chuàng)建組件之前,所述安全框架可以通過(guò)其提供的監(jiān)督機(jī)制來(lái)檢查組 件的腳本/代碼,以便從中挑出潛在的惡意代碼,其中所述檢查進(jìn)一步包括掃描源代碼 串以找到匹配的關(guān)鍵字,其中所述關(guān)鍵字可以指示出可以訪問(wèn)DOM樹(shù)節(jié)點(diǎn)或cookie、與遠(yuǎn) 程服務(wù)器進(jìn)行通信、以及執(zhí)行腳本的對(duì)象和功能,其包括但不限于"document"、"this"、 "XMLHTTPRequest ,,、" eval ,,、" window ,,、" location" 'hi story ,,、" parent ,,、" self";以及口向 應(yīng)于發(fā)現(xiàn)所述關(guān)鍵字,將所述關(guān)鍵字屏蔽。 在框430,由所述安全框架裝置提供一種監(jiān)督機(jī)制,用于監(jiān)督和控制在組件創(chuàng)建期 間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作。所述安全框架 裝置可以被用于匹配預(yù)定的安全策略以及/或者在出現(xiàn)不安全因素的時(shí)候警告用戶。具體 而言,所述監(jiān)督機(jī)制可以進(jìn)一步包括以下 框440 :監(jiān)視并控制組件之間進(jìn)行的外部調(diào)用,其中所述監(jiān)督并控制進(jìn)一步包括 對(duì)由進(jìn)行調(diào)用的組件提供的參數(shù)進(jìn)行驗(yàn)證,所述參數(shù)包括調(diào)用者權(quán)標(biāo)、目標(biāo)組件、要調(diào)用的 功能名稱;響應(yīng)于所述參數(shù)合法,允許所述組件執(zhí)行調(diào)用;以及響應(yīng)于所述參數(shù)不合法,拒 絕所述調(diào)用。 框450 :監(jiān)督并控制組件的Ajax請(qǐng)求,從而禁止直接的跨站Ajax請(qǐng)求,其中所述 監(jiān)督并控制進(jìn)一步包括檢查所述Ajax請(qǐng)求中的目標(biāo)主機(jī)是否是該組件所屬的主機(jī);響應(yīng) 于所述目標(biāo)主機(jī)是該組件所屬的主機(jī),則允許所述Ajax請(qǐng)求;以及響應(yīng)于所述目標(biāo)主機(jī)不 是該組件所屬的主機(jī),則拒絕所述Ajax請(qǐng)求。 框460 :監(jiān)督并控制組件對(duì)于DOM樹(shù)的訪問(wèn),從而禁止直接的DOM樹(shù)訪問(wèn),其中所 述監(jiān)督并控制進(jìn)一步包括在組件被創(chuàng)建的時(shí)候?qū)⑻囟ǖ慕?jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)提供給該組 件,所述經(jīng)覆蓋的D0M樹(shù)節(jié)點(diǎn)具有用于操作真實(shí)的D0M樹(shù)節(jié)點(diǎn)的一些功能;禁止組件對(duì)其它 DOM樹(shù)節(jié)點(diǎn)的訪問(wèn);以及在組件需要的時(shí)候向其提供其它經(jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)。
框470 :監(jiān)督并控制組件對(duì)cookie的訪問(wèn),從而僅允許組件訪問(wèn)其自己的cookie, 其中所述監(jiān)督并控制進(jìn)一步包括檢查該組件要訪問(wèn)的cookie是否是該組件自己的 cookie ;響應(yīng)于該組件要訪問(wèn)的cookie是該組件自己的cookie,則允許所述訪問(wèn);以及響 應(yīng)于該組件要訪問(wèn)的cookie不是該組件自己的cookie,則拒絕所述訪問(wèn)。
此外,所述監(jiān)督機(jī)制可以進(jìn)一步包括這樣的功能在創(chuàng)建組件之前檢查組件的腳 本/代碼,以及檢查在組件間傳遞的腳本/代碼,以便從中挑出潛在的惡意代碼,其中所 述檢查進(jìn)一步包括掃描源代碼串以找到匹配的關(guān)鍵字,其中所述關(guān)鍵字可以指示出可 以訪問(wèn)DOM樹(shù)節(jié)點(diǎn)或cookie、與遠(yuǎn)程服務(wù)器進(jìn)行通信、以及執(zhí)行腳本的對(duì)象和功能,其包 括但不限于"document"、"this"、"XMLHTTPRequest"、"eval"、"window"、"location"、"history"、"parent"、"self";以及響應(yīng)于發(fā)現(xiàn)所述關(guān)鍵字,將所述關(guān)鍵字屏蔽。
并且,所述監(jiān)督機(jī)制還可以進(jìn)一步包括提供一種覆蓋的eval功能,其用于替換 初始的eval功能,其中所述功能可以將被拆開(kāi)的串拼湊在一起,從而便于進(jìn)行檢查。
以上詳細(xì)描述了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種用于在未修改瀏覽器上保護(hù)Web 應(yīng)用的跨域交互的系統(tǒng)和方法。如本領(lǐng)域普通技術(shù)人員可以了解的,本發(fā)明可以體現(xiàn)為方 法、系統(tǒng)和/或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可以呈現(xiàn)為完全硬件實(shí)施形式、完全軟件實(shí) 施形式或者軟件和硬件組合實(shí)施形式。此外,本發(fā)明可以被呈現(xiàn)為在機(jī)器可讀媒體上包括 的計(jì)算機(jī)程序產(chǎn)品,機(jī)器可讀媒體上存儲(chǔ)了用于對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行編程以執(zhí)行根據(jù)本發(fā)明 的過(guò)程的機(jī)器可執(zhí)行程序指令。這里所使用的術(shù)語(yǔ)"機(jī)器可讀媒體"包括向計(jì)算機(jī)系統(tǒng)提 供用于執(zhí)行的指令的任意媒體。這種媒體可以采用多種形式,包括但是不局限于非易失性 媒體、易失性媒體和傳輸媒體。非易失性媒體的常見(jiàn)形式例如包括軟盤(pán)、軟磁盤(pán)、硬盤(pán)、磁帶 或者任何其它磁媒體、光盤(pán)ROM (CD-ROM)或者任何其它光媒體、打孔卡或者任何其它帶有 孔圖案的物理媒體、可編程R0M(PR0M)、可擦寫(xiě)PR0M(EPR0M)、電EPR0M(EEPR0M)、閃速存儲(chǔ) 器、任何其它存儲(chǔ)芯片或者盒式磁帶(cartridge)、或者計(jì)算機(jī)系統(tǒng)可以讀取并適合存儲(chǔ)指 令的任何其它媒體。 適于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括直接地或通過(guò)系統(tǒng)總線間 接地耦合于存儲(chǔ)器單元的至少一個(gè)處理器。存儲(chǔ)器單元可以包括在程序代碼的實(shí)際執(zhí)行期 間使用的局部存儲(chǔ)器、海量存儲(chǔ)裝置、以及高速緩沖存儲(chǔ)器,該高速緩沖存儲(chǔ)器提供了至少 某種程序代碼的臨時(shí)存儲(chǔ)以便減少在執(zhí)行期間必須從海量存儲(chǔ)裝置檢索代碼的次數(shù)。
此外,可以理解,方框圖和/或流程圖中的每個(gè)方框以及方框圖和流程圖中的一 些方框的組合可以用 一些計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給一通用計(jì) 算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一機(jī)器,使得這些指令通過(guò) 計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備的處理器的執(zhí)行創(chuàng)建用于實(shí)現(xiàn)在方框圖和/或流程圖 內(nèi)或者方框內(nèi)所指定的功能的裝置。 盡管已經(jīng)參考優(yōu)選實(shí)施例具體地示出并描述了本發(fā)明,但其不是為了以公開(kāi)的形 式窮舉或限制本發(fā)明。對(duì)于本領(lǐng)域的普通技術(shù)人員,可以在形式上和細(xì)節(jié)上進(jìn)行各種改變 而不會(huì)背離本發(fā)明的精神和范圍。選擇并描述了實(shí)施例是為了最好地解釋本發(fā)明的原理和 實(shí)際的應(yīng)用,以及為了使本領(lǐng)域的其它普通技術(shù)人員能夠理解對(duì)于各種實(shí)施例的本發(fā)明, 所述實(shí)施例具有適合于預(yù)期的具體使用的各種修改。
1權(quán)利要求
一種用于在未修改瀏覽器上保護(hù)Web應(yīng)用的跨域交互的系統(tǒng),所述系統(tǒng)包括安全框架裝置,其中所述安全框架裝置由瀏覽器創(chuàng)建;其中,所述安全框架裝置進(jìn)一步包括組件創(chuàng)建器,用于創(chuàng)建來(lái)自多個(gè)源的組件;以及監(jiān)督模塊,用于監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作。
2. 根據(jù)權(quán)利要求1所述的系統(tǒng),其中所述系統(tǒng)進(jìn)一步包括用于由瀏覽器向具有安全框架裝置源代碼的服務(wù)器請(qǐng)求安全框架裝置的源代碼的裝置;以及用于即時(shí)地運(yùn)行所述源代碼以創(chuàng)建所述安全框架裝置的裝置。
3. 根據(jù)權(quán)利要求1所述的系統(tǒng),其中組件創(chuàng)建器進(jìn)一步包括用于基于要?jiǎng)?chuàng)建的組件從相應(yīng)的服務(wù)器獲得該組件的腳本/代碼的裝置;用于為所創(chuàng)建的每個(gè)組件生成一個(gè)隨機(jī)串作為該組件的權(quán)標(biāo)的裝置,所述權(quán)標(biāo)用于由所述安全框架裝置確定組件的身份;以及用于將所創(chuàng)建的權(quán)標(biāo)和一個(gè)安全框架裝置引用引擎放置在組件中的裝置;其中,所述安全框架裝置進(jìn)一步包括組件儲(chǔ)存庫(kù),用于存儲(chǔ)所創(chuàng)建的每個(gè)組件的引用、權(quán)標(biāo)、主機(jī)、以及組件名稱。
4. 根據(jù)權(quán)利要求1-3中任一項(xiàng)所述的系統(tǒng),其中所述監(jiān)督模塊進(jìn)一步包括調(diào)用代理,所述調(diào)用代理用于監(jiān)視并控制組件之間進(jìn)行的外部調(diào)用,其中所述監(jiān)督并控制進(jìn)一步包括對(duì)由進(jìn)行調(diào)用的組件提供的參數(shù)進(jìn)行驗(yàn)證,所述參數(shù)包括調(diào)用者權(quán)標(biāo)、目標(biāo)組件、要調(diào)用的功能名稱;響應(yīng)于所述參數(shù)合法,允許所述組件執(zhí)行調(diào)用;以及響應(yīng)于所述參數(shù)不合法,拒絕所述調(diào)用。
5. 根據(jù)權(quán)利要求l-3中任一項(xiàng)所述的系統(tǒng),其中所述監(jiān)督模塊進(jìn)一步包括Ajax請(qǐng)求代理,所述Ajax請(qǐng)求代理用于監(jiān)督并控制組件的Ajax請(qǐng)求,從而禁止直接的跨站Ajax請(qǐng)求;其中所述監(jiān)督并控制進(jìn)一步包括檢查所述Ajax請(qǐng)求中的目標(biāo)主機(jī)是否是該組件所屬的主機(jī);響應(yīng)于所述目標(biāo)主機(jī)是該組件所屬的主機(jī),則允許所述Ajax請(qǐng)求;以及響應(yīng)于所述目標(biāo)主機(jī)不是該組件所屬的主機(jī),則拒絕所述Ajax請(qǐng)求。
6. 根據(jù)權(quán)利要求1-3中任一項(xiàng)所述的系統(tǒng),其中所述監(jiān)督模塊進(jìn)一步包括D0M樹(shù)代理,所述DOM樹(shù)代理用于監(jiān)督并控制組件對(duì)于DOM樹(shù)的訪問(wèn),從而禁止直接的DOM樹(shù)訪問(wèn);其中所述監(jiān)督并控制進(jìn)一步包括在組件被創(chuàng)建的時(shí)候?qū)⑻囟ǖ慕?jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)提供給該組件,所述經(jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)具有用于操作真實(shí)的DOM樹(shù)節(jié)點(diǎn)的一些功能;禁止組件對(duì)其它DOM樹(shù)節(jié)點(diǎn)的訪問(wèn);以及在組件需要的時(shí)候向其提供其它經(jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)。
7. 根據(jù)權(quán)利要求1-3中任一項(xiàng)所述的系統(tǒng),其中所述監(jiān)督模塊進(jìn)一步包括cookie代理,所述cookie代理用于監(jiān)督并控制組件對(duì)cookie的訪問(wèn),從而僅允許組件訪問(wèn)其自己的cookie ;其中所述監(jiān)督并控制進(jìn)一步包括檢查該組件要訪問(wèn)的cookie是否是該組件自己的cookie ;響應(yīng)于該組件要訪問(wèn)的cookie是該組件自己的cookie,則允許所述訪問(wèn);以及響應(yīng)于該組件要訪問(wèn)的cookie不是該組件自己的cookie,則拒絕所述訪問(wèn)。
8. 根據(jù)權(quán)利要求1-3中任一項(xiàng)所述的系統(tǒng),其中所述監(jiān)督模塊進(jìn)一步包括惡意腳本過(guò)濾器,所述惡意腳本過(guò)濾器用于在創(chuàng)建組件之前檢查組件的腳本/代碼,以及檢查在組件間傳遞的腳本/代碼,以便從中挑出潛在的惡意代碼;其中所述檢查進(jìn)一步包括掃描源代碼串以找到匹配的關(guān)鍵字,其中所述關(guān)鍵字指示出可以訪問(wèn)DOM樹(shù)節(jié)點(diǎn)或cookie、與遠(yuǎn)程服務(wù)器進(jìn)行通信、以及執(zhí)行腳本的對(duì)象和功能,其從包括以下項(xiàng)目的組中選出"document,,、"this,,、"XMLHTTPRequest,,、"eval,,、"window,,、"location,,、"history,,、"parent ,,、"self,,;以及響應(yīng)于發(fā)現(xiàn)所述關(guān)鍵字,將所述關(guān)鍵字屏蔽。
9. 根據(jù)權(quán)利要求1-3中任一項(xiàng)所述的系統(tǒng),其中所述監(jiān)督模塊進(jìn)一步包括用于提供一種覆蓋的eval功能的裝置,所述覆蓋的eval功能用于替換初始的eval功能,其中所述功能可以將被拆開(kāi)的串拼湊在一起,從而便于進(jìn)行檢查。
10. 根據(jù)權(quán)利要求1所述的系統(tǒng),其中所述安全框架裝置還包括用于匹配預(yù)定的安全策略的裝置以及/或者用于在出現(xiàn)不安全因素的時(shí)候警告用戶的裝置。
11. 一種用于在未修改瀏覽器上保護(hù)Web應(yīng)用的跨域交互的方法,所述方法包括由瀏覽器創(chuàng)建安全框架裝置;由所述安全框架裝置創(chuàng)建來(lái)自多個(gè)源的組件;以及由所述安全框架裝置監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作。
12. 根據(jù)權(quán)利要求11所述的方法,其中由瀏覽器創(chuàng)建安全框架裝置的所述步驟進(jìn)一步包括由瀏覽器向具有安全框架裝置源代碼的服務(wù)器請(qǐng)求安全框架裝置的源代碼;以及即時(shí)地運(yùn)行所述源代碼以創(chuàng)建所述安全框架裝置。
13. 根據(jù)權(quán)利要求11所述的方法,其中由所述安全框架裝置創(chuàng)建組件的所述步驟進(jìn)一步包括基于要?jiǎng)?chuàng)建的組件從相應(yīng)的服務(wù)器獲得該組件的腳本/代碼;為所創(chuàng)建的每個(gè)組件生成一個(gè)隨機(jī)串作為該組件的權(quán)標(biāo),所述權(quán)標(biāo)用于由所述安全框架裝置確定組件的身份;將所創(chuàng)建的權(quán)標(biāo)和一個(gè)安全框架裝置引用引擎放置在組件中;以及在所述安全框架裝置中存儲(chǔ)所創(chuàng)建的每個(gè)組件的引用、權(quán)標(biāo)、主機(jī)、以及組件名稱。
14. 根據(jù)權(quán)利要求11-13中任一項(xiàng)所述的方法,其中所述監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作的所述步驟進(jìn)一步包括監(jiān)視并控制組件之間進(jìn)行的外部調(diào)用,其中監(jiān)督并控制組件之間進(jìn)行的外部調(diào)用的步驟進(jìn)一步包括對(duì)由進(jìn)行調(diào)用的組件提供的參數(shù)進(jìn)行驗(yàn)證,所述參數(shù)包括調(diào)用者權(quán)標(biāo)、目標(biāo)組件、要調(diào)用的功能名稱;響應(yīng)于所述參數(shù)合法,允許所述組件執(zhí)行調(diào)用;以及響應(yīng)于所述參數(shù)不合法,拒絕所述調(diào)用。
15. 根據(jù)權(quán)利要求11-13中任一項(xiàng)所述的方法,其中所述監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作的所述步驟進(jìn)一步包括監(jiān)督并控制組件的Ajax請(qǐng)求,從而禁止直接的跨站Ajax請(qǐng)求;其中監(jiān)督并控制組件的Ajax請(qǐng)求的所述步驟進(jìn)一步包括檢查所述Ajax請(qǐng)求中的目標(biāo)主機(jī)是否是該組件所屬的主機(jī);響應(yīng)于所述目標(biāo)主機(jī)是該組件所屬的主機(jī),則允許所述Ajax請(qǐng)求;以及響應(yīng)于所述目標(biāo)主機(jī)不是該組件所屬的主機(jī),則拒絕所述Ajax請(qǐng)求。
16. 根據(jù)權(quán)利要求11-13中任一項(xiàng)所述的方法,其中所述監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作的所述步驟進(jìn)一步包括監(jiān)督并控制組件對(duì)于DOM樹(shù)的訪問(wèn),從而禁止直接的DOM樹(shù)訪問(wèn);其中監(jiān)督并控制對(duì)于DOM樹(shù)的訪問(wèn)的所述步驟進(jìn)一步包括在組件被創(chuàng)建的時(shí)候?qū)⑻囟ǖ慕?jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)提供給該組件,所述經(jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)具有用于操作真實(shí)的DOM樹(shù)節(jié)點(diǎn)的一些功能;禁止組件對(duì)其它DOM樹(shù)節(jié)點(diǎn)的訪問(wèn);以及在組件需要的時(shí)候向其提供其它經(jīng)覆蓋的DOM樹(shù)節(jié)點(diǎn)。
17. 根據(jù)權(quán)利要求11-13中任一項(xiàng)所述的方法,其中所述監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作的所述步驟進(jìn)一步包括監(jiān)督并控制組件對(duì)cookie的訪問(wèn),從而僅允許組件訪問(wèn)其自己的cookie ;其中監(jiān)督并控制組件對(duì)cookie的訪問(wèn)的所述步驟進(jìn)一步包括檢查該組件要訪問(wèn)的cookie是否是該組件自己的cookie ;響應(yīng)于該組件要訪問(wèn)的cookie是該組件自己的cookie,則允許所述訪問(wèn);以及響應(yīng)于該組件要訪問(wèn)的cookie不是該組件自己的cookie,則拒絕所述訪問(wèn)。
18. 根據(jù)權(quán)利要求11-13中任一項(xiàng)所述的方法,其中所述監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作的所述步驟進(jìn)一步包括在創(chuàng)建組件之前檢查組件的腳本/代碼,以及檢查在組件間傳遞的腳本/代碼,以便從中挑出潛在的惡意代碼;其中所述檢查步驟進(jìn)一步包括掃描源代碼串以找到匹配的關(guān)鍵字,其中所述關(guān)鍵字指示出可以訪問(wèn)DOM樹(shù)節(jié)點(diǎn)或cookie、與遠(yuǎn)程服務(wù)器進(jìn)行通信、以及執(zhí)行腳本的對(duì)象和功能,其從包括以下項(xiàng)目的組中選出"document,,、"this,,、 "XMLHTTPRequest,,、 "eval ,,、"window,,、" location,,、 "history,,、"parent ,,、"self,,;以及響應(yīng)于發(fā)現(xiàn)所述關(guān)鍵字,將所述關(guān)鍵字屏蔽。
19. 根據(jù)權(quán)利要求11-13中任一項(xiàng)所述的方法,其中所述監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作的所述步驟進(jìn)一步包括提供一種覆蓋的eval功能,其用于替換初始的eval功能,其中所述功能可以將被拆開(kāi)的串拼湊在一起,從而便于進(jìn)行檢查。
20. 根據(jù)權(quán)利要求11所述的方法,其中所述方法進(jìn)一步包括匹配預(yù)定的安全策略以及/或者在出現(xiàn)不安全因素的時(shí)候警告用戶。
全文摘要
提供了一種用于在未修改瀏覽器上保護(hù)Web應(yīng)用的跨域交互的系統(tǒng)和方法。所述系統(tǒng)包括安全框架裝置,其中所述安全框架裝置由瀏覽器創(chuàng)建;其中,所述安全框架裝置進(jìn)一步包括組件創(chuàng)建器,用于創(chuàng)建來(lái)自多個(gè)源的組件;以及監(jiān)督模塊,用于監(jiān)督和控制在組件創(chuàng)建期間執(zhí)行的腳本/代碼以及在組件創(chuàng)建之后各個(gè)組件執(zhí)行的調(diào)用和交互操作。根據(jù)本發(fā)明的實(shí)施例的所述系統(tǒng)和方法可以禁止來(lái)自組件的任意潛在的惡意操作,并且提供安全解決方案來(lái)監(jiān)視和控制這些操作,從而同時(shí)兼顧功能性和安全性。
文檔編號(hào)G06F17/30GK101788982SQ200910005958
公開(kāi)日2010年7月28日 申請(qǐng)日期2009年1月22日 優(yōu)先權(quán)日2009年1月22日
發(fā)明者付榮耀, 張夏天, 袁泉, 趙石頑, 高偉 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司