Flash 平台安全性概觀

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

Flash Player 和 AIR 執行階段使用的安全性模型,是以載入之 SWF 檔案、HTML、媒體以及其他資源的來源網域為基礎。來自特定網際網路網域 (如 www.example.com) 的可執行程式碼,永遠都可以存取該網域的所有資料,這些資源是放在相同的安全性群組之中,稱為「安全執行程序」(如需詳細資訊,請參閱 安全執行程序 )。

例如,SWF 檔案中的 ActionScript 程式碼,可以載入 SWF 檔、點陣圖、音效、文字檔,以及來自其本身網域的任何其它資源,而且只要兩個檔案都是使用 ActionScript 3.0 撰寫,永遠都允許來自相同網域的兩個 檔之間的跨指令碼處理。「跨指令碼處理」是指檔案中的程式碼具備另一個檔案的屬性、方法和物件的存取能力。

但是在使用 ActionScript 3.0 撰寫的 SWF 檔與使用舊版 ActionScript 撰寫的 SWF 檔之間並不支援跨指令碼處理,不過這兩種檔案可以使用 LocalConnection 類別進行通訊。而且根據預設,禁止使用 SWF 檔跨指令碼處理來自其他網域的 ActionScript 3.0 SWF 檔以及從其他網域載入資料的功能,但是呼叫被載入 SWF 檔中的 Security.allowDomain() 方法即可授與此存取功能。如需詳細資訊,請參閱 跨指令碼處理

根據預設,下列基本安全性原則永遠都適用:

  • 相同安全性執行程序中的資源永遠都可以彼此存取。

  • 遠端安全執行程序中的可執行程式碼,永遠都不能存取本機檔案和資料。

Flash Player 和 AIR 執行階段會將以下各項視為個別的網域,然後分別為每個網域設定安全執行程序:

  • http://example.com

  • http://www.example.com

  • http://store.example.com

  • https://www.example.com

  • http://192.0.34.166

即使具名的網域 (如 http://example.com) 對應於特定 IP 位址 (如 http://192.0.34.166),執行階段會分別為兩者設置不同的安全執行程序。

開發人員有兩種基本方式可以用來授與 SWF 檔權限,以存取來自與 SWF 檔不同安全執行程序的資源:

在 Flash Player 和 AIR 執行階段安全性模型中,載入內容與摘取或存取資料是有區別的。「內容」是定義為媒體,包括執行階段可以顯示的視覺媒體、音效、視訊或包含顯示媒體的 SWF 檔案或 HTML。「資料」則是定義為只能由 程式碼存取的項目。內容和資料是以不同的方式載入。

  • 載入內容—您可以使用類別 (例如 Loader、Sound 以及 NetStream 類別) 來載入內容;使用 Flex 時透過 MXML 標籤;或者在 AIR 應用程式中透過 HTML 標籤。

  • 擷取資料:您可以使用 Bitmap 物件、 BitmapData.draw() 方法和 BitmapData.drawWithQuality() 方法、 Sound.id3 屬性,或 SoundMixer.computeSpectrum() 方法,從載入的媒體內容中擷取資料。 drawWithQuality 方法可以在 Flash Player 11.3 及更新版本,以及 AIR 3.3 及更新版本中取得。

  • 存取資料:您可以使用類別 (例如 URLStream、URLLoader、FileReference、Socket 和 XMLSocket 等類別),從外部檔案 (如 XML 檔) 載入,直接存取資料。AIR 會產生額外的類別,用於載入資料,例如 FileStream 和 XMLHttpRequest。

Flash Player 安全性模型為載入內容與存取資料定義不同的規則。一般來說,載入內容的限制比存取資料的限制少。

一般而言,您可以從任何位置載入內容 (SWF 檔、點陣圖、MP3 檔和視訊),但是如果內容是來自與所載入之程式碼或內容不同的網域時,將會置入不同的安全執行程序中進行分割處理。

載入內容作業只包含少數幾道關卡:

  • 根據預設,本機 SWF 檔 (由使用者的硬碟之類非網路位址載入的檔案) 會在具有系統檔案的本機安全執行程序中加以分類,這些檔案無法從網路載入內容。如需詳細資訊,請參閱 本機安全執行程序

  • 「即時訊息通訊協定」(Real-Time Messaging Protocol,RTMP) 伺服器可以限制內容的存取權限。如需詳細資訊,請參閱 使用 RTMP 伺服器所傳遞的內容

如果載入的媒體是影像、音效或視訊,其資料 (如像素資料和聲音資料) 只有在媒體原始網域的 URL 原則檔中已經包含了該 SWF 檔的網域,才能由其安全執行程序以外的 SWF 檔來存取。如需詳細資訊,請參閱 將載入的媒體當做資料加以存取

其它形式的載入資料包括文字或 XML 檔,都是用 URLLoader 物件載入。同樣地,在這種情況下,若要從另一個安全執行程序存取任何資料,必須透過原始網域的 URL 原則檔授與權限。如需詳細資訊,請參閱 使用 URLLoader 和 URLStream

備註: 至於在 AIR 應用程式安全執行程序中執行的程式碼,永遠不需要原則檔,便能載入遠端內容或資料。