本地沙箱
“ 本地文件” 是指通过使用 file: 协议或统一命名约定 (UNC) 路径引用的任何文件。本地 SWF 文件放置在四个本地沙箱中的一个内:
• 只能与本地文件系统内容交互的沙箱 — 出于安全性考虑, Flash Player 在默认情况下将所有本地 SWF 文件和资源放置在只能与本地文件系统内容交互的沙箱中。通过此沙箱, SWF 文件可以读取本地文件(例如通过使用 URLLoader 类),但是它们无法以任何方式与网络进行通信。这样可向用户保证本地数据不会泄漏到网络或以其它方式不适当地共享。
• 只能与远程内容交互的沙箱 — 编译SWF文件时,可以指定该文件作为本地文件运行时拥有网络访问权限。这些文件位于只能与远程内容交互的沙箱中。分配到只能与远程内容交互的沙箱中的 SWF 文件将失去其本地文件访问权限,但允许这些 SWF 文件访问网络中的数据。不过,只有通过 URL 策略文件或调用 Security.allowDomain() 方法来授予操作权限,才允许远程内容交互的 SWF 文件读取源自网络的数据。为授予此类权限, URL 策略文件必须向“ 所有” 域授予权限,方法是使用 <allow-access-from domain="*"/> 或使用Security.allowDomain("*")。
• 受信任的本地沙箱 — 注册为受信任(由用户或安装程序注册)的本地 SWF 文件放置在受信任的本地沙箱中。系统管理员和用户还可以根据安全注意事项将本地 SWF 文件重新分配(移动)到受信任的本地沙箱,或者从该沙箱中进行重新分配。分配到受信任的本地沙箱的 SWF 文件可以与其它任何SWF 文件交互,也可以从任何位置(远程或本地)加载数据。
• AIR 应用程序安全沙箱 — 该沙箱包含在运行 AIR 应用程序时安装的内容。默认情况下, AIR 应用程序沙箱中的文件可以跨脚本访问任何域中的任何文件。但是,AIR 应用程序沙箱以外的文件不会获许跨脚本访问 AIR 文件。默认情况下,AIR应用程序沙箱中的文件可以加载任何域中的内容和数据。只能与远程内容交互的沙箱和只能与本地文件系统内容交互的沙箱之间的通信以及只能与本地文件系统内容交互的沙箱和远程沙箱之间的通信是严格禁止的。运行于 Flash Player 中的应用程序或用户/ 管理员不能授予允许此类通信的权限。在本地 HTML 文件和本地 SWF 文件之间以任一方向访问脚本(例如使用 ExternalInterface 类)均要求涉及的 HTML 文件和 SWF 文件应位于受信任的本地沙箱中。这是因为浏览器的本地安全模型与 Flash Player 本地安全模型不同。只能与远程内容交互的沙箱中的 SWF 文件无法加载只能与本地文件系统内容交互的沙箱中的 SWF 文件。只能与本地文件系统内容交互的沙箱中的 SWF 文件无法加载只能与远程内容交互的沙箱中的 SWF 文件。
设置本地 SWF 文件的沙箱类型
通过在创作工具中设置文档发布设置,您可以配置只能与本地文件系统内容交互的沙箱或只能与远程内容交互的沙箱的 SWF文件。最终用户或计算机管理员可以指定某个本地 SWF 文件是受信任的,以允许该文件从所有域(本地和网络)加载数据。这一点在“ 全局 Flash Player 信任” 目录和“ 用户 Flash Player 信任” 目录中指定。
Security.sandboxType 属性
SWF 文件的作者可以使用只读的静态 Security.sandboxType 属性来确定 Flash Player 向其分配该 SWF 文件的沙箱类型。Security 类包括表示 Security.sandboxType 属性可能值的常量,如下所示:
• Security.REMOTE — SWF 文件来自 Internet URL,并遵守基于域的沙箱规则。
• Security.LOCAL_WITH_FILE — SWF 文件是本地文件,但尚未受到用户信任,且没有使用网络名称进行发布。此 SWF 文件可以从本地数据源读取数据,但无法与 Internet 进行通信。
• Security.LOCAL_WITH_NETWORK — SWF 文件是本地文件,且尚未受到用户信任,但已使用网络名称进行发布。此SWF 文件可与 Internet 通信,但不能从本地数据源读取数据。
• Security.LOCAL_TRUSTED — SWF 文件是本地文件,且已使用“ 设置管理器” 或 Flash Player 信任配置文件受到用户信任。此 SWF 文件既可以从本地数据源读取数据,也可以与 Internet 进行通信。
• Security.APPLICATION — SWF 文件在 AIR 应用程序中运行,并且随该应用程序的包(AIR 文件)一起安装。默认情况下, AIR 应用程序沙箱中的文件可以跨脚本访问任何域中的任何文件。但是, AIR 应用程序沙箱以外的文件不会获许跨脚本访问 AIR 文件。默认情况下, AIR 应用程序沙箱中的文件可以加载任何域中的内容和数据。
权限控制
Flash Player 客户端运行时安全模型是围绕 SWF 文件、本地数据和 Internet URL 等这些对象资源设计而成的模型。“ 资源持有者” 是指拥有或使用这些资源的各方。资源持有者可以对其自己的资源进行控制(安全设置),每种资源有四个持有者。Flash Player 对这些控制严格采用一种权利层次结构,如下图所示:
该图说明,如果管理员限制对资源的访问,则任何其他持有者都不能覆盖该限制。
管理员控制
计算机的管理用户(使用管理权限登录的用户)可以应用能影响计算机所有用户的 Flash Player 安全设置。在非企业环境(例如家庭计算机)中,通常只有一个用户,该用户也拥有管理访问权限。即使是在企业环境中,单个用户也可以拥有计算机管理权限。
管理用户控制有两种类型:
• mms.cfg 文件
• “ 全局 Flash Player 信任” 目录
mms.cfg 文件
mms.cfg 文件是一个文本文件,由管理员用于启用或限制用户对各种功能的访问。Flash Player 启动时,将从此文件中读取其安全设置,然后使用这些设置限制功能。mms.cfg 文件包含管理员用于管理隐私控制、本地文件安全性、套接字连接等功能。SWF 文件可通过调用 Capabilities.avHardwareDisable 和 Capabilities.localFileReadDisable 属性来访问已禁用功能的某些信息。但是, mms.cfg 文件中的大部分设置无法通过 ActionScript 进行查询。为对计算机强制执行与应用程序无关的安全和隐私策略,只能由系统管理员修改 mms.cfg 文件。mms.cfg 文件不能用于安装应用程序。虽然使用管理权限运行的安装程序可以修改 mms.cfg 文件的内容,但是 Adobe 将此类使用视为违反用户的信任,并且劝告安装程序的创建者决不要修改 mms.cfg 文件。
mms.cfg 文件存储在以下位置:
• Windows:system\Macromed\Flash\mms.cfg
(例如, C:\WINDOWS\system32\Macromed\Flash\mms.cfg)
• Mac:app support/Macromedia/mms.cfg
(例如, /Library/Application Support/Macromedia/mms.cfg)
“ 全局 Flash Player 信任” 目录
管理用户和安装应用程序可以针对所有用户将指定的本地 SWF 文件注册为受信任。这些 SWF 文件会被分配到受信任的本地沙箱。它们可以与任何其它 SWF 文件进行交互,也可以从任意位置(远程或本地)加载数据。文件在“ 全局 Flash Player 信任” 目录中被指定为受信任,位置如下:
• Windows:system\Macromed\Flash\FlashPlayerTrust
(例如, C:\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust)
• Mac:app support/Macromedia/FlashPlayerTrust
(例如, /Library/Application Support/Macromedia/FlashPlayerTrust)
“Flash Player 信任” 目录可以包含任意数目的文本文件,每个文件均列出受信任的路径,一个路径占一行。每个路径可以是单个的 SWF 文件、HTML 文件,也可以是目录。注释行以 # 号开头。例如,包含以下文本的 Flash Player 信任配置文件表示将向指定目录及所有子目录中的所有文件授予受信任状态:
# Trust files in the following directories:
C:\Documents and Settings\All Users\Documents\SampleApp
信任配置文件中列出的路径应始终是本地路径或 SMB 网络路径。信任配置文件中的任何 HTTP 路径均会被忽略;只能信任本地文件。为避免发生冲突,应为每个信任配置文件指定一个与安装应用程序相应的文件名,并且使用 .cfg 文件扩展名。由于开发人员通过安装应用程序分发本地运行的 SWF 文件,因此可以让安装应用程序向“ 全局 Flash Player 信任” 目录添加一个配置文件,为要分发的文件授予完全访问权限。安装应用程序必须由拥有管理权限的用户来运行。与 mms.cfg 文件不同,包含“ 全局 Flash Player 信任” 目录是为了让安装应用程序授予信任权限。管理用户和安装应用程序都可以使用“ 全局 FlashPlayer 信任” 目录指定受信任的本地应用程序。
用户控制
Flash Player 提供三种不同的用户级别权限设置机制:“ 设置 UI”、“ 设置管理器” 和“ 用户 Flash Player 信任” 目录。
设置 UI 和设置管理器
“ 设置 UI” 是一种用于配置特定域设置的快速交互机制。“ 设置管理器” 显示一个更详细的界面,并提供全局更改功能,全局更改可影响对许多域或所有域拥有的权限。另外,当 SWF 文件请求新的权限,要求有关安全或隐私的运行时决策时,程序会显示一些对话框,用户可以在这些对话框中调整某些 Flash Player 设置。设置管理器和设置 UI 提供了安全相关选项,如摄像头和麦克风设置、共享对象存储设置、与旧内容相关的设置等。注: 在 mms.cfg 文件中所进行的任何设置都不会反映在设置管理器中。
“ 用户 Flash Player 信任” 目录
用户和安装应用程序可以将指定的本地 SWF 文件注册为受信任。这些 SWF 文件会被分配到受信任的本地沙箱。它们可以与任何其它 SWF 文件进行交互,也可以从任意位置(远程或本地)加载数据。用户在“ 用户 Player 信任” 目录中将文件指定为受信任,该目录与 Flash 共享对象存储区域的所在目录相同,位置(特定于当前用户)如下:
• Windows:app data\Macromedia\Flash Player\#Security\FlashPlayerTrust
(例如,在 Windows XP 上:C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash
Player\#Security\FlashPlayerTrust,在 Windows Vista 上:
C:\Users\JohnD\AppData\Roaming\Macromedia\Flash Player\#Security\FlashPlayerTrust)
在 Windows 中, Application Data 默认为隐藏状态。若要显示隐藏的文件夹和文件,请选择“ 我的电脑” 打开Windows 资源管理器,选择“ 工具”>“ 文件夹选项”,然后选择“ 查看” 选项卡。在“ 查看” 选项卡之下,选择“ 显示所有文件和文件夹” 单选按钮。
• Mac:app data/Macromedia/Flash Player/#Security/FlashPlayerTrust
(例如, /Users/JohnD/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)这些设置只会影响当前用户,不会影响登录到计算机的其他用户。如果没有管理权限的用户在属于他们自己的系统中安装了某个应用程序,则“ 用户 Flash Player 信任” 目录允许安装程序将该应用程序注册为该用户的受信任程序。由于开发人员通过安装应用程序分发本地运行的 SWF 文件,因此可以让安装应用程序向“ 用户 Flash Player 信任” 目录添加一个配置文件,为要分发的文件授予完全访问权限。即使在这种情况下,也将“ 用户 Flash Player 信任” 目录文件视为用户控制,原因是用户操作(安装)启动了它。