自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Flash應(yīng)用程序安全攻防戰(zhàn)

原創(chuàng)
安全
Flash應(yīng)用程序(即SWF文件)不僅可以通過(guò)web協(xié)議進(jìn)行分發(fā),并且還能讀取本地或者遠(yuǎn)程文件、建立網(wǎng)絡(luò)連接,以及跟其他SWF文件進(jìn)行通信等。通過(guò)本文,您將了解具體的Flash攻擊手段,有用的Flash安全審查技巧以及安全有關(guān)的開(kāi)發(fā)/配置技術(shù)。

【51CTO.com獨(dú)家特稿】Adobe的Flash技術(shù)已經(jīng)變得越來(lái)越流行,現(xiàn)在它不僅用于創(chuàng)建動(dòng)畫和廣告,而且還用來(lái)開(kāi)發(fā)復(fù)雜的互聯(lián)網(wǎng)應(yīng)用軟件。Flash應(yīng)用程序(即SWF文件)不僅可以通過(guò)web協(xié)議進(jìn)行分發(fā),并且還能讀取本地或者遠(yuǎn)程文件、建立網(wǎng)絡(luò)連接,以及跟其他SWF文件進(jìn)行通信等。通過(guò)本文,您將了解具體的Flash攻擊手段,有用的Flash安全審查技巧以及安全有關(guān)的開(kāi)發(fā)/配置技術(shù)。

一、XSS威脅

從事Web應(yīng)用程序的開(kāi)發(fā)或者測(cè)試工作的人都知道,Web應(yīng)用程序有一個(gè)常見(jiàn)的安全漏洞,即通常所說(shuō)的跨站點(diǎn)腳本攻擊(XSS)。一般地,如果一個(gè)應(yīng)用程序接受不可信任的源提供的惡意代碼,并且在沒(méi)有對(duì)這些數(shù)據(jù)進(jìn)行消毒處理的情況下直接將其返回給毫無(wú)防備的用戶的話,就會(huì)發(fā)生XSS。雖然Flash應(yīng)用程序?qū)SS及其他類型的安全威脅也沒(méi)有免疫能力,但是web管理員和Flash應(yīng)用程序開(kāi)發(fā)人員卻能夠通過(guò)采取相應(yīng)的安全措施來(lái)提高這種新興技術(shù)的安全性。

一般情況下,進(jìn)行跨站點(diǎn)腳本攻擊時(shí),攻擊者需要將惡意腳本代碼(諸如JavaScript或者VBScript代碼)注入到Web 應(yīng)用程序中,這通常是通過(guò)哄騙用戶單擊一個(gè)鏈接或者訪問(wèn)一個(gè)邪惡的網(wǎng)頁(yè)來(lái)完成的。隨后,該web應(yīng)用程序?qū)⒃谑芎φ叩膚eb會(huì)話的上下文中顯示并執(zhí)行注入的代碼。這種攻擊通常能導(dǎo)致用戶帳戶失竊,但是卻不會(huì)導(dǎo)致執(zhí)行命令,除非同時(shí)利用了瀏覽器的安全漏洞。因?yàn)镾WF程序可以嵌入到網(wǎng)站中,并對(duì)HTML DOM(文檔對(duì)象模型)有完全的訪問(wèn)權(quán),所以可以通過(guò)利用它們來(lái)發(fā)動(dòng)XSS攻擊。想像一個(gè)顯示第三方Flash廣告的免費(fèi)電子郵件web服務(wù):一個(gè)惡意的廣告商可以創(chuàng)建一個(gè)惡意的SWF應(yīng)用程序來(lái)劫持您的電子郵件帳號(hào),以便發(fā)送垃圾郵件。默認(rèn)時(shí),F(xiàn)lash Player對(duì)同域的DOM具有完全的訪問(wèn)權(quán)限。

下面介紹針對(duì)SWF應(yīng)用程序的XSS攻擊的基本流程。第一步,攻擊者必須首先設(shè)法將代碼注入到應(yīng)用程序中,以便讓代碼重新顯示給其他用戶。Adobe為程序員提供了各式各樣的用戶界面組件,諸如組合框、單選按鈕以及文本字段等,它們的用法跟HTML表單對(duì)象極為相似。此外,讓SWF應(yīng)用程序接受從外部輸入的參數(shù)的方法也很多。

我們可以使用 < OBJECT > 和< embed >標(biāo)簽將屬性FlashVar嵌入到一個(gè)HTML文檔中。

 
圖1

此外,還可以直接通過(guò)URL傳入數(shù)據(jù):

 
圖2

另外,可以利用類LoadVars來(lái)裝載外部數(shù)據(jù)。

 
圖3

對(duì)于ActionScript 2來(lái)說(shuō),F(xiàn)lashVars會(huì)被自動(dòng)導(dǎo)入到Flash應(yīng)用程序的變量空間,但是在ActionScript 3中,加載外部參數(shù)時(shí)需要額外的代碼來(lái)完成。一個(gè)常見(jiàn)的錯(cuò)誤是,從FlashVars或者URL參數(shù)接受數(shù)據(jù)后,沒(méi)有經(jīng)過(guò)恰當(dāng)?shù)妮斎腧?yàn)證就直接將它們傳遞給了與瀏覽器直接通信的那些函數(shù)了。ActionScript 2中的函數(shù)getURL以及ActionScript 3中的函數(shù)navigateToURL具有將指定的URL裝載到一個(gè)瀏覽器窗口的能力??梢钥紤]一下以下ActionScript代碼:

 
圖4

該代碼直接利用一個(gè)來(lái)自外部源的變量來(lái)調(diào)用函數(shù)getURL,這會(huì)將用戶重定向至指定的URL。例如,攻擊者可能會(huì)建立如下所示的請(qǐng)求:

 
圖5

發(fā)出該請(qǐng)求之后,會(huì)彈出一個(gè)JavaScript警告框,并顯示站點(diǎn)cookie的內(nèi)容。Cookie經(jīng)常用于存儲(chǔ)敏感的帳戶數(shù)據(jù),諸如會(huì)話標(biāo)識(shí)符等。DOM是一種標(biāo)準(zhǔn)對(duì)象模型,用來(lái)以樹(shù)狀結(jié)構(gòu)表示HTML;DOM可被JavaScript代碼用于動(dòng)態(tài)刺探或者修改HTML頁(yè)面??梢钥紤]下面的JavaScript代碼,它將更改在這個(gè)HTML頁(yè)面上的第一個(gè)圖像的屬性source。屬性source被修改后,在該頁(yè)面上顯示的圖像也將隨之改變。

 
圖6

攻擊者常用的一種手法是,通過(guò)修改HTML DOM插入一幅新的圖像,并讓該圖像的屬性source指向在攻擊者所控制的服務(wù)器上的一個(gè)文件,同時(shí)將cookie內(nèi)容作為一個(gè)參數(shù)。通過(guò)這種方法,攻擊者只要監(jiān)視他的計(jì)算機(jī)的日志就能夠獲取cookie數(shù)據(jù)。如果其中含有會(huì)話id的話,攻擊者就能夠完全控制用戶的帳戶,直至?xí)挼狡跒橹?。還有一個(gè)ActionScript函數(shù)可用于發(fā)動(dòng)XSS攻擊,它就是fscommand。SWF文件可以通過(guò)這個(gè)fscommand函數(shù)跟Flash Player或者托管Flash Player的程序進(jìn)行通信。通常情況下,F(xiàn)lash Player會(huì)駐留于一個(gè)Web瀏覽器中,但是它也可以位于其他能夠托管ActiveX控件的程序中。函數(shù)fscommand由兩個(gè)部分組成:一個(gè)命令和一個(gè)參數(shù)。下面的fscommand函數(shù)將發(fā)送一個(gè)changeText命令,該命令的參數(shù)是由FlashVar來(lái)指定的。

 
圖7

清單 1 中的JavaScript代碼因此能留駐在處理SWF應(yīng)用程序發(fā)送的命令的HTML文檔中。它只是取得參數(shù),然后修改由text指定的HTML 元素。開(kāi)發(fā)人員應(yīng)該注意從用戶那里接收的、用于fscommand函數(shù)的輸入數(shù)據(jù)的類型,以及各參數(shù)在HTML文檔中是如何使用的。

清單 1. 接收f(shuō)scommand的代碼

 
圖8

清單 2. 簡(jiǎn)單的密碼檢查代碼

 
圖9

上述的示例代碼為攻擊者直接向DOM注入HTML或者腳本代碼提供了方便之門,例如,下面的請(qǐng)求將包含并執(zhí)行一個(gè)存放在遠(yuǎn)程主機(jī)上的JavaScript文件。

 
圖10

#p#

二、HTML格式的組件

Adobe可以支持標(biāo)準(zhǔn)的HTML標(biāo)簽的一個(gè)子集,我們可以使用ActionScript 2.0中的Text Field 組件或者TextArea組件把這些受支持的HTML標(biāo)簽可以放到Flash電影片段中。如果不對(duì)用于構(gòu)造HTML的用戶輸入進(jìn)行嚴(yán)格的驗(yàn)證的話,這兩個(gè)組件都有可能被濫用。對(duì)image和anchor標(biāo)簽的驗(yàn)證需要格外仔細(xì),因?yàn)樗鼈冇绕淙菀讓?dǎo)致安全漏洞。在Flash中,利用< img >標(biāo)簽不僅可以在SWF文件和電影片斷中嵌入外部圖象文件,而且還可以嵌入SWF文件和電影片斷,從而發(fā)起各式各樣的攻擊。下面的代碼會(huì)把來(lái)自外部源的數(shù)據(jù)賦給HTML的text組件:

 
圖11

將JavaScript嵌入圖像的嘗試將會(huì)失敗,因?yàn)镕lash Player好像會(huì)驗(yàn)證圖像是否真是一幅JPEG、GIF 或者PNG格式的圖像。

 
圖12

但是以下代碼將向您證明,F(xiàn)lash Player所做的驗(yàn)證太小兒科。它只是檢查給定的source屬性是否以字符串.jpg結(jié)尾的,因此,只需添加一個(gè)類似C語(yǔ)言的行注釋,我們無(wú)需改變這個(gè)腳本代碼的功能便可哄騙Flash Player去執(zhí)行< IMG >標(biāo)簽中的腳本。瀏覽器一旦加載了這個(gè)SWF文件,不需要人工介入該JavaScript就會(huì)被執(zhí)行,并出現(xiàn)一個(gè)彈出式窗口。

 
圖13

使用此方法我們可以很輕松地將JavaScript或者VBScript注入TextArea組件中。以下請(qǐng)求說(shuō)明對(duì)于錨標(biāo)簽沒(méi)有這樣的驗(yàn)證,但是這類XSS攻擊要求人工介入。用戶必須單擊這個(gè)連接才會(huì)執(zhí)行代碼。

 
圖14

就像前面提到的那樣,< IMG >標(biāo)簽不僅能夠裝載實(shí)際的圖象文件,而且還可以裝載SWF文件。這可能導(dǎo)致一個(gè)不懷好意的SWF文件被載入到一個(gè)受信任的應(yīng)用程序中。當(dāng)裝載其他SWF文件時(shí),應(yīng)該使用一個(gè)框罩來(lái)限制這個(gè)子SWF文件的顯示區(qū)。如果原始的SWF沒(méi)有設(shè)置框罩,那么子SWF文件就有可能覆蓋整個(gè)播放區(qū)域。這可用于欺騙受信任的應(yīng)用程序。但是如果這個(gè)注入的SWF來(lái)自一個(gè)外部域的話,F(xiàn)lash安全策略仍舊對(duì)其有效。#p#

三、ActionScript的函數(shù)協(xié)議

上述的例子使用了JavaScript來(lái)演示用戶常見(jiàn)的XSS攻擊,但是有一個(gè)專門用于Flash的協(xié)議即asfunction,它可以致使一個(gè)連接調(diào)用一個(gè)ActionScript函數(shù)。例如,當(dāng)用戶點(diǎn)擊了存放在TextArea組件中的錨點(diǎn)時(shí),下面的代碼會(huì)調(diào)用帶兩個(gè)參數(shù)的本地函數(shù)foo。

 
圖15

顯而易見(jiàn),這種能夠從HTML組件內(nèi)部直接調(diào)用Actionscript函數(shù)的能力存在極大的安全隱患。可以考慮一下清單 2所示的一個(gè)簡(jiǎn)單Flash應(yīng)用程序,該程序通過(guò)接收用戶名和口令來(lái)進(jìn)行身份驗(yàn)證。當(dāng)用戶輸入了錯(cuò)誤的密碼時(shí),用戶名以基于HTML的TextArea組件形式回顯給用戶。假設(shè)一個(gè)輸入了如下所示的用戶名,并隨意猜了一個(gè)密碼。 

 
圖16

應(yīng)用程序?qū)⑼ㄖ@個(gè)用戶,提供的用戶名/密碼無(wú)效,同時(shí)用戶注入的錨也作為HTML輸出的一部分顯示了出來(lái)。當(dāng)用戶點(diǎn)擊這個(gè)鏈接時(shí),setPassword函數(shù)將會(huì)被調(diào)用,從而將密碼設(shè)為abc。上例說(shuō)明了允許用戶執(zhí)行任意的Actionscript函數(shù)來(lái)操縱程序的應(yīng)用程序數(shù)據(jù)是非常危險(xiǎn)的。如果一個(gè)Flash應(yīng)用程序中存在持久性的XSS安全漏洞,這會(huì)導(dǎo)致存心不良的用戶能夠讓其他用戶在受信任的沙箱中執(zhí)行任意的Flash函數(shù)。受本地信任的SWF文件甚至能讀取本地的文件,并向任意服務(wù)器發(fā)送消息。ActionScript包含有豐富的函數(shù)庫(kù),因此攻擊者可以通過(guò)更高級(jí)的攻擊類型利用這些庫(kù)函數(shù)進(jìn)行聯(lián)網(wǎng)和通信,以至于訪問(wèn)本地的文件系統(tǒng)。 #p#

四、未初始化的變量

PHP程序員可能聽(tīng)說(shuō)過(guò)一種有爭(zhēng)議的特性,叫做Register Globals,該特性允許從POST和GET請(qǐng)求將請(qǐng)求中的變量注入到一個(gè)腳本的變量空間中。當(dāng)然,該特性并不常用,甚至有的程序員都不知道該特性的存在,由于備受抨擊,所以將在新的PHP 6中去掉該特性。 理論上,使用register globals也有可能寫出完全安全的程序,但是現(xiàn)實(shí)中在Web應(yīng)用程序中發(fā)現(xiàn)的大量漏洞都是由于該特性使用不當(dāng)所導(dǎo)致的。

ActionScript也有一個(gè)類似的特性,不過(guò)在版本3的時(shí)候已將其取消了,但是因?yàn)锳ctionScript 2依舊在Flash社區(qū)內(nèi)廣泛使用,所以這個(gè)問(wèn)題仍然值得我們關(guān)注。任何未初始化的變量都可以作為FlashVar進(jìn)行初始化。當(dāng)程序員忘記給關(guān)鍵變量賦初值或者將變量指定為undefined的時(shí)候,很可能會(huì)帶來(lái)后患??梢钥紤]一下清單 3 中的代碼,它決定用戶是否被允許查看一些機(jī)密信息。

清單3. 依賴于未初始化變量的代碼示例

 
圖17

程序員依賴于這樣一個(gè)事實(shí),即如果變量userLoggedIn沒(méi)有初始化,它就會(huì)被設(shè)為undefined。而undefined這個(gè)值在條件語(yǔ)句中被作為false對(duì)待。繞過(guò)ActionScript 2中的代碼很容易,因?yàn)樽兞縰serLoggedIn未經(jīng)初始化。只需在GET請(qǐng)求或者在HTML中作為一個(gè)對(duì)象參數(shù)將userLoggedIn設(shè)為true,如下所示:

 
圖18

在ActionScript 3中,F(xiàn)lashVars只能通過(guò)LoaderInfo類的parameter屬性進(jìn)行訪問(wèn),這使得針對(duì)未初始化的數(shù)據(jù)的這種攻擊不再可行,不過(guò),開(kāi)發(fā)人員仍然應(yīng)該仔細(xì)檢查傳給SWF的所有參數(shù)。#p#

五、SWF之間的通信

與瀏覽器的Cookie機(jī)制相似,本地共享對(duì)象(LSOs)為SWF應(yīng)用程序提供了少量的持久性存儲(chǔ)空間。LSO會(huì)受到特定的域、本地路徑或者HTTPS連接等方面的限制。 在清單 4 中的代碼將生成一個(gè)共享對(duì)象,并且該對(duì)象可以被存儲(chǔ)在/a/b或者其子目錄(如a/b/c)下的其它SWF程序所訪問(wèn)。函數(shù)flush將強(qiáng)制將這個(gè)對(duì)象寫到這個(gè)文件中。

清單4. SharedObject示例代碼

 
圖19

如果您打算把機(jī)密信息儲(chǔ)藏在一個(gè)本地共享對(duì)象之內(nèi),那么可以把標(biāo)志secure設(shè)為true,這樣一來(lái)就只有通過(guò)HTTPS才能訪問(wèn)這個(gè)SWF。不管它們是如何被傳輸?shù)?,LSOs是以明文的形式存放在客戶端的機(jī)器中的。由于ActionScript自身沒(méi)有提供加密類,所以如果想保護(hù)存儲(chǔ)在LSO中的重要的信息的話,就只好使用第三方加密程序庫(kù)了。

為了讓運(yùn)行于同一個(gè)客戶端機(jī)器上的SWF應(yīng)用程序之間可以直接相互通信,ActionScript提供了LocalConnection類。這時(shí)必須有一個(gè)swf應(yīng)用程序充當(dāng)接收方,另一個(gè)充當(dāng)發(fā)送方。 這些SWF應(yīng)用程序并不一定非要運(yùn)行在同一個(gè)瀏覽器中不可,但是默認(rèn)時(shí),只有位于相同的域中的SWF程序才能相互通信。在調(diào)試階段,開(kāi)發(fā)人員經(jīng)常使用allowDomain函數(shù)來(lái)放寬這個(gè)默認(rèn)的安全限制。清單5中的代碼,讓LocalConnection來(lái)接收數(shù)據(jù)。

清單5. 接受 LocalConnection 的代碼

 
圖20

如果產(chǎn)品代碼中遺留了allowDomain(‘*”) 將是非常危險(xiǎn)的,因?yàn)樗试S來(lái)自任何域的任何SWF程序都能訪問(wèn)你的應(yīng)用程序的內(nèi)部函數(shù)。通配符最好的使用方式是只允許相同的域或者子域之間的SWF可以進(jìn)行通信。例如,allowDomain(“*.test.com”)將允許在www.test.com和mail.test.com之間的通信。為了發(fā)送數(shù)據(jù),可以使用LocalConnection函數(shù),如清單 6所示。 如果不使用函數(shù)connect的話,發(fā)送方可以使用想要函數(shù)名和參數(shù)來(lái)直接調(diào)用函數(shù)send。

清單 6. 發(fā)送LocalConnection的代碼

 
圖21

#p#

六、正確的輸入驗(yàn)證

輸入驗(yàn)證的常見(jiàn)方法是檢查一塊數(shù)據(jù)是否匹配一個(gè)正則表達(dá)式。正則表達(dá)式的作用是描述一個(gè)字符模式。ActionScript在版本3開(kāi)始對(duì)正則表達(dá)式提供本地支持,并使用EMCAScript語(yǔ)言規(guī)范來(lái)實(shí)現(xiàn)正則表達(dá)式。仍然使用ActionScript 2的傳統(tǒng)開(kāi)發(fā)人員在驗(yàn)證數(shù)據(jù)時(shí),卻無(wú)法借助正則表達(dá)式或者諸如As2lib之類的第三方程序庫(kù)。可以考慮一下以下有弱點(diǎn)的代碼:

 
圖22

不要盲目信任用戶提交的電子郵件,而要使用正則表達(dá)式進(jìn)行雙重檢查來(lái)將惡意用戶拒之門外。清單7中的代碼給出了一個(gè)使用正則表達(dá)式測(cè)試一個(gè)電子郵件地址是否合法的函數(shù)示例。

清單 7.驗(yàn)證電子郵件的規(guī)則表達(dá)式

 
圖23

如果您的應(yīng)用程序必須遷移到ActionScript 3.0,那么即使不用正則表達(dá)式也能進(jìn)行輸入驗(yàn)證,盡管此解決方案不太優(yōu)雅并且不太合乎RFC標(biāo)準(zhǔn)。不用正則表達(dá)式驗(yàn)證輸入時(shí),一般地需要調(diào)用許多標(biāo)準(zhǔn)串函數(shù),如清單8所示。

清單8. 無(wú)規(guī)則表達(dá)式的電子郵件驗(yàn)證

 
圖24

如果您必須使用用戶輸入的數(shù)據(jù)來(lái)供getURL函數(shù)或者HTML文本組件使用,那么可以利用正則表達(dá)式定義那些數(shù)據(jù)是可以接受的,并只接受http或者h(yuǎn)ttps協(xié)議處理程序用于有效的鏈接。不要依賴轉(zhuǎn)義函數(shù)來(lái)進(jìn)行輸入驗(yàn)證。按照Flash幫助文檔的規(guī)定,escape函數(shù)將參數(shù)轉(zhuǎn)換成一個(gè)字符串,并以URL編碼的格式對(duì)其進(jìn)行編碼,其中非數(shù)字字母字符被替代為%十六進(jìn)制序列??梢钥紤]一下以下代碼,它沒(méi)有正確地使用escape函數(shù)來(lái)進(jìn)行輸入驗(yàn)證。

 
圖25

Escape函數(shù)不能阻止惡意用戶潛入JavaScript函數(shù),并執(zhí)行他們自己任意的腳本代碼,例如請(qǐng)看以下請(qǐng)求:

 
圖26

#p#

七、安全地公布內(nèi)容

不僅Flash開(kāi)發(fā)人員應(yīng)該花時(shí)間去驗(yàn)證輸入,web管理員也應(yīng)該通過(guò)設(shè)置安全措施來(lái)防止不可信的SWF文件訪問(wèn)瀏覽器和/或網(wǎng)絡(luò)。可以通過(guò) < OBJECT > < embed >標(biāo)簽把SWF應(yīng)用程序作為對(duì)象嵌入在一個(gè)HTML頁(yè)面中。您可以在影響安全策略的< embed >或者< object >標(biāo)簽之內(nèi)規(guī)定三個(gè)可選參數(shù)。 參數(shù)allowScriptAccess控制SWF文件是否能夠訪問(wèn)HTML容器。而allowNetworking參數(shù)則控制SWF使用ActionScript的網(wǎng)絡(luò)API的能力。最后,allowFullScreen參數(shù)決定Flash應(yīng)用程序是否被允許控制整個(gè)屏幕。

參數(shù)allowScriptAccess有三個(gè)可能的值:

◆always:允許SWF和HTML頁(yè)面通訊,不管加載這個(gè)HTML頁(yè)面的域名如何。 只有在完全信任這個(gè)SWF的時(shí)候才能使用這個(gè)選項(xiàng),它是Flash Player 7和早先的版本的默認(rèn)行為。

◆sameDomain:只有在兩者位于同一個(gè)域中時(shí)才允許SWF應(yīng)用程序修改底層的HTML頁(yè)面。 位于域www.a.com中的Flash應(yīng)用程序不能修改位于www.b.com中的HTML頁(yè)面。這個(gè)是Flash Player 8及隨后版本的默認(rèn)行為。

◆never :絕不允許在HTML頁(yè)面和SWF應(yīng)用程序之間進(jìn)行通信。

參數(shù)allowNetworking也有三個(gè)可能的值:

◆all:SWF應(yīng)用程序被允許使用網(wǎng)絡(luò)API建立無(wú)限制的網(wǎng)絡(luò)連接。

◆internal:SWF應(yīng)用程序不允許調(diào)用瀏覽器的導(dǎo)航或者交互API,但是被允許調(diào)用其他網(wǎng)絡(luò)調(diào)用。

◆none:禁止SWF應(yīng)用程序使用任何網(wǎng)絡(luò)API。

參數(shù)allowFullScreen僅僅有兩個(gè)可能的值:

◆true :SWF應(yīng)用程序被允許占用整個(gè)屏幕。 這個(gè)選項(xiàng)可能被惡意用于誘騙攻擊。

◆false:fullscreen模式不被允許。

許多流行的論壇允許其管理員創(chuàng)建他們自己的BBCode以使得用戶可以格式化討論貼或者包含額外的內(nèi)容。許多管理員已經(jīng)增加了支持SWF的BBCodes??梢钥紤]一下以下不安全的HTML代碼替換Flash BBCode。

 
圖27

在一個(gè)有敵意的你不可以信任任何張貼的swf應(yīng)用程序設(shè)置中,必須將在< embed >標(biāo)簽之內(nèi)的allowNetworking、allowScriptAccess和allowfullscreen顯式設(shè)置,以防止惡意應(yīng)用程序進(jìn)行非本意的網(wǎng)絡(luò)或者腳本調(diào)用。不應(yīng)依賴默認(rèn)Flash Player安全設(shè)置,而應(yīng)當(dāng)假設(shè)一些用戶無(wú)法或不愿意更新軟件。清單 9中的HTML代碼給出了安全的設(shè)置。

清單 9. 為 HTML 的Object 標(biāo)簽添加適當(dāng)?shù)陌踩O(shè)置

 
圖28

#p#

八、安全分析工具

目前,可用來(lái)對(duì)Flash應(yīng)用程序進(jìn)行安全審計(jì)的工具仍然不多。Stefano Di Paola已經(jīng)編寫了精巧的工具用來(lái)發(fā)現(xiàn)跨站點(diǎn)腳本攻擊和跨站Flash漏洞,該工具名為SWFIntruder。這個(gè)工具提供了一組預(yù)定義的攻擊方式,這些是可定制的,并能以半自動(dòng)化的方式進(jìn)行XSS測(cè)試。這個(gè)工具運(yùn)行在Web服務(wù)器上,可以通過(guò)瀏覽器進(jìn)行訪問(wèn),它能顯示全部未定義變量和SWF應(yīng)用程序中所有已經(jīng)實(shí)例化的變量。

用戶可以通過(guò)選擇一個(gè)參數(shù)來(lái)測(cè)試和執(zhí)行各種攻擊,并提供XSS掃描的輸出結(jié)果。 SWFIntruder的一個(gè)主要局限性是它僅僅能分析低于版本8或者ActionScript 1或者2創(chuàng)建的Flash應(yīng)用程序。當(dāng)審計(jì)封閉源碼的Flash應(yīng)用程序或元件的時(shí)候,反編譯器就顯得尤為重要了。反編譯器提供了編譯程序的逆過(guò)程,因?yàn)樗鼘⒌图?jí)計(jì)算機(jī)代碼轉(zhuǎn)換為一個(gè)高層的抽象化代碼。 Flash反編譯器接受swf應(yīng)用程序的字節(jié)碼,然后生成相應(yīng)的ActionScript代碼,而后者相對(duì)來(lái)說(shuō)更易于人類閱讀。為了揭露安全性缺陷,使用靜態(tài)分析工具來(lái)針對(duì)生成的ActionScript代碼進(jìn)行分析就更方便了。免費(fèi)的反編譯器的一個(gè)例子是Flare,它將從一個(gè)swf應(yīng)用程序中提取全部ActionScript文件。不過(guò),就像SWFIntruder一樣,F(xiàn)lare 不支持ActionScript。 但是有商業(yè)產(chǎn)品可以從ActionScript1/2或者ActionScript3應(yīng)用程序生成FLA文件,前提是必須掏錢。

九、結(jié)束語(yǔ)

在開(kāi)發(fā)基于web的富應(yīng)用程序的時(shí)候,許多Flash應(yīng)用程序開(kāi)發(fā)人員并沒(méi)有意識(shí)到它們正受到惡意用戶的各種安全威脅。盡管安全社區(qū)對(duì)XSS、未初始化的變量攻擊及其他輸入驗(yàn)證漏洞并不陌生,但是Flash提供了一種新的攻擊類型,尤其是那些無(wú)防備的和未經(jīng)嚴(yán)格測(cè)試的Flash程序。不過(guò),只要經(jīng)過(guò)程序員、測(cè)試人員和web管理員密切配合,經(jīng)過(guò)適當(dāng)?shù)呐嘤?xùn)并對(duì)輸入端進(jìn)行嚴(yán)格檢查,就能夠有效減輕Flash應(yīng)用程序中的跨站點(diǎn)腳本攻擊漏洞所帶了的威脅。

【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明出處及作者!】

【編輯推薦】

  1. 利用Flash參數(shù)注入的新型攻擊技術(shù)
  2. 360安全中心警告:Flash曝出嚴(yán)重安全漏洞
責(zé)任編輯:許鳳麗 來(lái)源: 51CTO.com
相關(guān)推薦

2011-01-17 23:41:13

2012-10-25 13:54:03

云安全云計(jì)算

2009-08-20 16:45:32

2011-01-07 10:04:50

2018-11-12 00:35:56

2019-09-02 14:45:33

2024-04-30 11:06:52

2010-09-28 14:10:21

2014-10-13 13:20:27

2013-01-28 14:16:59

2021-06-16 09:40:44

網(wǎng)絡(luò)安全物聯(lián)網(wǎng)代碼

2009-02-10 10:20:06

2012-11-15 09:32:35

雙十一淘寶DDoS

2019-03-05 12:43:07

AI攻防OpenAI攻擊

2015-08-24 17:20:21

2010-05-20 09:48:36

2014-02-19 10:43:04

虛擬運(yùn)營(yíng)商

2014-03-12 10:01:15

阿里云亞馬遜云計(jì)算

2021-04-25 21:45:25

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全攻防ZigBee安全

2013-03-27 16:58:40

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)