安全沙箱Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本 客户端计算机可以获得包含来自许多源(如外部网站、本地文件系统或安装的 AIR 应用程序)的代码、内容和数据的各个文件。Flash Player 和 AIR 运行时会根据代码文件及其他资源(如共享对象,位图、声音、视频和数据文件)加载时的来源分别将其分配到安全沙箱中。以下部分介绍运行时强制执行的规则,这些规则控制着在给定沙箱内执行的代码或内容可以访问哪些内容。 有关 Flash Player 安全性的详细信息,请参阅 Flash Player 开发人员中心主题“安全性”,网址为 www.adobe.com/go/devnet_security_cn。 远程沙箱Flash Player 和 AIR 运行时将来自 Internet 的资源(包括 SWF 文件)分类到与其原始域对应的单独沙箱中。例如,会将从 example.com 加载的资源放置到与从 foo.org 加载的资源不同的安全沙箱中。默认情况下,对这些文件授予访问其自身所在服务器中任何资源的权限。通过显式的 Web 站点许可和作者许可(例如 URL 策略文件和 Security.allowDomain() 方法),可以允许远程 SWF 文件访问其他域的其他数据。有关详细信息,请参阅网站控制(策略文件)和作者(开发人员)控制。 远程 SWF 文件无法加载任何本地文件或资源。 有关 Flash Player 安全性的详细信息,请参阅 Flash Player 开发人员中心主题“安全性”,网址为 www.adobe.com/go/devnet_security_cn。 本地沙箱“本地文件”是指通过使用 file: 协议或统一命名约定 (UNC) 路径引用的任何文件。本地 SWF 文件放置在四个本地沙箱中的一个内:
只能与远程内容交互的沙箱和只能与本地文件系统内容交互的沙箱之间的通信以及只能与本地文件系统内容交互的沙箱和远程沙箱之间的通信是严格禁止的。运行于 Flash Player 中的应用程序或用户/管理员不能授予允许此类通信的权限。 在本地 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 应用程序仅加载应用程序目录中的文件,它们可以加载任意源中任何类型的文件。其中包括用户计算机上的本地文件以及可用外部源中的文件(例如本地网络或 Internet 上的文件)。文件类型不会对安全限制产生影响;加载的 HTML 文件与从相同源加载的 SWF 文件具有相同的安全权限。 应用程序安全沙箱中的内容可以访问 AIR API,而其他沙箱中的内容则无法访问。例如,限制 air.NativeApplication.nativeApplication.applicationDescriptor 属性(该属性返回应用程序的应用程序描述符文件的内容)访问应用程序安全沙箱中的内容。另一个示例是受限制的 API 为 FileStream 类,其中包含用于读取和写入本地文件系统的方法。 在 ActionScript 3.0 Reference for Adobe Flash Platform 中,仅用于应用程序安全沙箱中的内容的 ActionScript API 将使用 AIR 徽标表示。在其他沙箱中使用这些 API 会导致运行时引发 SecurityError 异常。 对于 HTML 内容(位于 HTMLLoader 对象中),所有 AIR JavaScript API(使用 AIRAliases.js 文件时通过 window.runtime 属性或 air 对象可用)都可用于应用程序安全沙箱中的内容。其他沙箱中的 HTML 内容无权访问 window.runtime 属性,因此该内容无法访问 AIR 或 Flash Player API。 在 AIR 应用程序沙箱内执行内容具有下列额外的限制:
对 AIR 内的 JavaScript 的限制与应用程序安全沙箱中的内容不同,非应用程序安全沙箱中的 JavaScript 内容随时都可以调用 eval() 函数来执行动态生成的代码。但是,对 AIR 内在非应用程序安全沙箱中运行的 JavaScript 具有限制。这些限制包括:
有关详细信息,请参阅对不同沙箱中的内容的代码限制。 设置本地 SWF 文件的沙箱类型最终用户或计算机管理员可以指定某个本地 SWF 文件是受信任的,以允许该文件从所有域(本地和网络)加载数据。这一点在“全局 Flash Player 信任”目录和“用户 Flash Player 信任”目录中指定。有关详细信息,请参阅管理员控制和用户控制。 有关本地沙箱的详细信息,请参阅本地沙箱。 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 属性可能值的常量,如下所示:
|
|