安全執行程序

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

用戶端電腦可以取得個別檔案,可能包含程式碼、內容以及來自一些來源的資料,這些來源像是外部網站、本機檔案系統,或者安裝的 AIR 應用程式。Flash Player 和 AIR 執行階段會在各個程式碼檔案和其它資源 (如共享物件、點陣圖、聲音、視訊和資料檔案) 載入 Flash Player 時,根據其來源分別指定至安全執行程序。下列各節將說明由執行階段強制執行的規則,以控制在指定的安全執行程序中執行的程式碼或內容可以存取的項目。

如需有關 Flash Player 安全性的詳細資訊,請參閱 Flash Player 開發人員中心主題「安全性」,網址為: www.adobe.com/go/devnet_security_en

遠端安全執行程序

Flash Player 和 AIR 執行階段在與來源網域對應的個別安全執行程序中,會為來自網際網路資源進行分類 (包括 SWF 檔案)。 例如,從 example.com 載入的資源會放到不同的安全執行程序中,與 foo.org 載入的資源區隔開來。 根據預設,這些檔案都獲得授權,可自本身的伺服器存取任何資源。遠端 SWF 檔可透過明確網站及作者權限 (如 URL 原則檔及 Security.allowDomain() 方法),允許自其它網域存取額外的資料。如需詳細資訊,請參閱 網站控制 (原則檔) 作者 (開發人員) 控制

遠端 SWF 檔不能載入任何本機檔案或資源。

如需有關 Flash Player 安全性的詳細資訊,請參閱 Flash Player 開發人員中心主題「安全性」,網址為: www.adobe.com/go/devnet_security_en

本機安全執行程序

「本機檔案」代表任何使用 file: 通訊協定或通用命名慣例 (UNC) 路徑參考的任何檔案。本機 SWF 檔是置入四個本機安全執行程序的其中一個:

  • 具有檔案系統的本機安全執行程序—基於安全用途,Flash Player 和 AIR 執行階段會將所有本機檔案放到具有檔案系統的本機安全執行程序中 (預設值)。可執行程式碼可以從此安全執行程序中讀取本機檔案 (例如,藉由使用 URLLoader 類別),但可能無法透過網路進行任何通訊。這麼做可以確保使用者無法將本機資料洩露至網路,或不當地與其他人分享。

  • 具有網路連線的本機安全執行程序:編譯 SWF 檔時,您可以指定讓它在以本機檔案方式執行時具有網路存取權限 (請參閱 設定本機 SWF 檔的安全執行程序類型 )。這些檔案會放在具有網路連線的本機安全執行程序中。指定到「具有網路連線的本機安全執行程序」的 SWF 檔會喪失存取本機檔案的權限,但這些 SWF 檔卻因而可自網路存取資料。不過,具有網路的本機 SWF 檔還是無法讀取任何網路衍生的資料,除非透過 URL 原則檔或呼叫 Security.allowDomain() 方法,取得執行該動作的權限。若要授與這種權限,則必須使用 <allow-access-from domain="*"/> Security.allowDomain("*") ,讓 URL 原則檔授與「所有」網域權限。如需詳細資訊,請參閱 網站控制 (原則檔) 作者 (開發人員) 控制

  • 本機信任的安全執行程序:註冊為受 (使用者或安裝程式應用程式) 信任的本機 SWF 檔會放在本機信任的安全執行程序中。系統管理員和使用者也可以根據安全性考量,重新指定 (移動) 本機 SWF 檔進出本機信任的安全執行程序 (請參閱 系統管理員控制 使用者控制 )。指定給本機信任的安全執行程序之 SWF 檔可以與任何其它 SWF 檔互動,並從任何一處 (遠端或本機) 載入資料。

  • AIR 應用程式執行程序:此執行程序包含以執行中 AIR 應用程式安裝的內容。根據預設,在 AIR 應用程式安全執行程序中執行的程式碼可以從任何網域跨指令碼處理任何檔案。但是,AIR 應用程式安全執行程序之外的檔案,則不允許在應用程式安全執行程序中進行跨指令碼程式碼處理。根據預設,在 AIR 應用程式安全執行程序中的程式碼和內容,可以從任何網域載入內容和資料。

嚴格禁止具有網路的本機與具有檔案系統的本機安全執行程序之間,以及具有檔案系統的本機安全執行程序與遠端安全執行之間的通訊。無論是在 Flash 中執行的應用程式,或使用者或系統管理員執行的應用程式,都無法授與權限允許上述通訊。

以指令碼處理本機 HTML 檔與本機 SWF 檔之間的往返通訊 (例如,使用 ExternalInterface 類別) 需要 HTML 檔和 SWF 檔雙方同時都在本機信任的安全執行程序中。這是因為瀏覽器的本機安全性模型與 Flash Player 本機安全性模型不同的緣故。

位於具有網路的本機安全執行程序中之 SWF 檔無法載入具有檔案系統的本機安全執行程序中之 SWF 檔。位於具有檔案系統的本機安全執行程序中之 SWF 檔無法載入具有網路的本機安全執行程序中之 SWF 檔。

AIR 應用程式執行程序

Adobe AIR 執行階段會將額外的應用程式安全執行程序,新增至 Flash Player 安全執行程序模型。安裝後變成 AIR 應用程式一部分的檔案,會載入至應用程式安全執行程序中。應用程式載入的任何其他檔案,它們符合一般 Flash Player 安全性模型指定的安全限制。

安裝應用程式時,AIR 套件中包含的所有檔案都會安裝到使用者電腦的應用程式目錄。開發人員可以透過 app:/ URL 配置,在程式碼中參考此目錄 (請參閱 URI 配置 )。應用程式目錄樹狀結構之中的所有檔案會在執行應用程式時,指定給應用程式安全執行程序。應用程式安全執行程序中的內容享有 AIR 應用程式可用的完整權限,包括與本機檔案系統互動。

許多 AIR 應用程式只使用這些安裝於本機的檔案來執行應用程式。但是,AIR 應用程式並不是只限於應用程式目錄中的檔案,而是可以從任何來源載入任何類型的檔案。其中包括使用者電腦的本機檔案,以及可用外部來源的檔案 (例如在區域網路或網際網路上的檔案)。檔案類型對於安全性限制沒有任何影響,從相同來源載入的 HTML 檔案與 SWF 檔案具有相同的安全性權限。

應用程式安全執行程序中的內容可以存取其它安全執行程序中內容不得使用的 AIR API。例如, air.NativeApplication.nativeApplication.applicationDescriptor 屬性會傳回應用程式的應用程式描述器檔案內容,但這個屬性僅供應用程式安全執行程序中的內容使用。另一個有限制 API 的範例是 FileStream 類別,此類別包含讀取及寫入本機檔案系統的方法。

在「適用於 Adobe Flash Platform 的 ActionScript 3.0 參考」中,僅供應用程式安全執行程序內容使用的 ActionScript API 會以 AIR 標誌標註。在其它安全執行程序中使用這些 API 會導致執行階段擲出 SecurityError 例外。

對於 HTML 內容 (在 HTMLLoader 物件中),所有 AIR JavaScript API (由 window.runtime 屬性所提供,或是在使用 AIRAliases.js 檔案時由 air 物件所提供) 都可供應用程式安全執行程序內容使用。其它安全執行程序的 HTML 內容不能存取 window.runtime 屬性,所以這項內容不能存取 AIR 或 Flash Player API。

在 AIR 應用程式安全執行程序中執行的內容,存在以下額外的限制:

  • 對於應用程式安全執行程序中的 HTML 內容,可在載入程式碼後以動態方式將字串轉換成可執行程式碼的 API 具備使用限制。其目的在於防止應用程式不小心從非應用程式來源 (例如可能不安全的網路網域) 插入 (並執行) 程式碼。其中一個範例是使用 eval() 函數。如需詳細資訊,請參閱 不同安全執行程序中內容的程式碼限制

  • 為了防止可能的網路釣魚攻擊,ActionScript TextField 物件中 HTML 內容裡的 img 標籤會在應用程式安全執行程序中的 SWF 內容裡加以忽略。

  • 應用程式安全執行程序中的內容無法在 ActionScript 2.0 文字欄位的 HTML 內容中使用 asfunction 通訊協定。

  • 應用程式安全執行程序中的 SWF 內容無法使用跨網域快取,這是 Flash Player 9 更新 3 新增的功能。這項功能可以讓 Flash Player 持續地快取 Adobe 平台組件內容,並依需求在載入的 SWF 內容中重複使用 (不需要多次重新載入內容)。

AIR 中 JavaScript 的限制

非應用程式安全執行程序中的 JavaScript 內容與應用程式安全執行程序中的內容不同,此 JavaScript 內容「可以」隨時呼叫 eval() 函數,執行以動態方式產生的程式碼。不過,在 AIR 中,在非應用程式安全執行程序中執行的 JavaScript 會有一些限制。包括:

  • 非應用程式安全執行程序中的 JavaScript 程式碼不能存取 window.runtime 物件,因此這種程式碼無法執行 AIR API。

  • 根據預設,非應用程式安全執行程序內容不能使用 XMLHttpRequest 呼叫,從呼叫要求的網域之外的其它網域來載入資料。但是,應用程式程式碼可以透過在包含的 frame 或 iframe 中設定 allowCrossdomainXHR 特質,授予非應用程式內容權限來執行此作業。如需詳細資訊,請參閱 不同安全執行程序中內容的程式碼限制

  • 呼叫 JavaScript window.open() 方法有其限制。如需詳細資訊,請參閱 呼叫 JavaScript window.open() 方法的限制

  • 遠端 (網路) 安全執行程序中的 HTML 內容只能從 (網路 URL 的) 遠端網域載入 CSS、 frame iframe img 內容。

  • 具有檔案系統的本機、具有網路連線的本機,或本機信任安全執行程序中的 HTML 內容只能從本機安全執行程序 (而不是從應用程式或網路 URL) 載入 CSS、 frame iframe img 內容。

如需詳細資訊,請參閱 不同安全執行程序中內容的程式碼限制

設定本機 SWF 檔的安全執行程序類型

電腦的使用者或系統管理員可以指定本機 SWF 檔為受信任,允許它從所有網域 (包括本機和網路) 載入資料。這是在「全域 Flash Player Trust」和「使用者 Flash Player Trust」目錄中指定。如需詳細資訊,請參閱 系統管理員控制 使用者控制

如需有關本機安全執行程序的詳細資訊,請參閱 本機安全執行程序

Adobe Flash Professional

您可以在編寫工具中設定文件的發佈設定,以設定「具有檔案系統的本機安全執行程序」或「具有網路連線的本機安全執行程序」的 SWF 檔。

Adobe Flex

您可以在 Adobe Flex 編譯器中設定 use-network 標籤,以設定「具有檔案系統的本機安全執行程序」或「具有網路連線的本機安全執行程序」的 SWF 檔。如需詳細資訊,請參閱「建置及部署 Adobe Flex 3 應用程式」中的「關於應用程式編譯器選擇」。

Security.sandboxType 屬性

SWF 檔的作者可以使用唯讀的靜態 Security.sandboxType 屬性,判斷 Flash Player 或 AIR 執行階段指定給 SWF 檔的安全執行程序類型。Security 類別包括代表 Security.sandboxType 屬性可能值的常數,如下所示:

  • Security.REMOTE :SWF 檔是來自網際網路 URL,而在網域架構的安全執行程序規則下運作。

  • Security.LOCAL_WITH_FILE :SWF 檔是本機檔案,但沒有受到使用者信任,而且不是使用網路指派來發佈。該 SWF 檔可以從本機資料來源讀取,但無法與網際網路進行通訊。

  • Security.LOCAL_WITH_NETWORK :SWF 檔是本機檔案,沒有受到使用者信任,但是使用網路指派來發佈。SWF 檔可以與網際網路進行通訊,但無法從本機資料來源讀取。

  • Security.LOCAL_TRUSTED :SWF 檔是本機檔案,而且使用者透過「設定管理員」或 Flash Player Trust 組態設定檔,決定加以信任。該 SWF 檔可從本機資料來源讀取,並與網際網路通訊。

  • Security.APPLICATION :這個檔案是在 AIR 應用程式中執行,而且它是使用該應用程式的套件 (AIR 檔) 來安裝。根據預設,在 AIR 應用程式安全執行程序中的檔案可以從任何網域跨指令碼處理任何檔案。但是,AIR 應用程式安全執行程序之外的檔案則不允許對 AIR 檔案進行跨指令碼處理。根據預設,在 AIR 應用程式安全執行程序中的檔案可以從任何網域載入內容和資料。