权限控制概述

Flash Player 客户端运行时安全模型是围绕 SWF 文件、本地数据和 Internet URL 等这些对象资源设计而成的模型。“资源持有者”是指拥有或使用这些资源的各方。资源持有者可以对其自己的资源进行控制(安全设置),每种资源有四个持有者。Flash Player 对这些控制严格采用一种权利层次结构,如下图所示:


说明 Flash Player 安全设置的权利层次结构的图:管理员设置具有最高优先级,其次是用户设置、网站设置,最后是作者设置。

安全控制层次结构


该图说明,如果管理员限制对资源的访问,则任何其他持有者都不能覆盖该限制。

以下各节详细说明了管理员、用户和网站控制。本章的其余部分对作者(开发人员)设置进行了说明。

子主题

管理用户控制
用户控制
Web 站点控制(跨域策略文件)
作者(开发人员)控制

管理用户控制

计算机的管理用户(使用管理权限登录的用户)可以应用能影响计算机所有用户的 Flash Player 安全设置。在非企业环境(例如家庭计算机)中,通常只有一个用户,该用户也拥有管理访问权限。即使是在企业环境中,单个用户也可以拥有计算机管理权限。

管理用户控制有两种类型:

mms.cfg 文件

在 Mac OS X 系统上,mms.cfg 文件位于 /Library/Application Support/Macromedia 中。在 Microsoft Windows 系统上,该文件位于系统目录的 Macromedia Flash Player 文件夹中(例如,在 Windows XP 默认安装中为 C:\windows\system32\macromed\flash\mms.cfg)。

Flash Player 启动时将从此文件中读取其安全设置,然后使用这些设置限制功能。

mms.cfg 文件包括管理员用于执行以下任务的设置:

SWF 文件可通过调用 Capabilities.avHardwareDisableCapabilities.localFileReadDisable 属性来访问已禁用功能的某些信息。但是,mms.cfg 文件中的大部分设置无法通过 ActionScript 进行查询。

为对计算机强制执行与应用程序无关的安全和隐私策略,只能由系统管理员修改 mms.cfg 文件。mms.cfg 文件不能用于安装应用程序。虽然使用管理权限运行的安装程序可以修改 mms.cfg 文件的内容,但是 Adobe 将此类使用视为违反用户的信任,并且劝告安装程序的创建者决不要修改 mms.cfg 文件。

“全局 Flash Player 信任”目录

管理用户和安装应用程序可以将指定的本地 SWF 文件注册为受信任。这些 SWF 文件会被分配到受信任的本地沙箱。它们可以与任何其它 SWF 文件进行交互,也可以从任意位置(远程或本地)加载数据。文件在“全局 Flash Player 信任”目录中被指定为受信任,该目录与 mms.cfg 文件的所在目录相同,位置(特定于当前用户)如下:

“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 信任”目录是为了让安装应用程序授予信任权限。管理用户和安装应用程序都可以使用“全局 Flash Player 信任”目录指定受信任的本地应用程序。

此外,还有适用于单个用户的“Flash Player 信任”目录(请参阅下一节用户控制)。

用户控制

Flash Player 提供三种不同的用户级别权限设置机制:“设置 UI”、“设置管理器”和“用户 Flash Player 信任”目录。

设置 UI 和设置管理器

“设置 UI”是一种用于配置特定域设置的快速交互机制。“设置管理器”显示一个更详细的界面,并提供全局更改功能,全局更改可影响对许多域或所有域拥有的权限。另外,当 SWF 文件请求新的权限,要求有关安全或隐私的运行时决策时,程序会显示一些对话框,用户可以在这些对话框中调整某些 Flash Player 设置。

“设置管理器”和“设置 UI”提供以下安全相关选项:

注意

 

在 mms.cfg 文件中所做的任何设置(请参阅管理用户控制)均不会反映在“设置管理器”中。

有关“设置管理器”的详细信息,请参阅 www.adobe.com/go/settingsmanager_cn。

“用户 Flash Player 信任”目录

用户和安装应用程序可以将指定的本地 SWF 文件注册为受信任。这些 SWF 文件会被分配到受信任的本地沙箱。它们可以与任何其它 SWF 文件进行交互,也可以从任意位置(远程或本地)加载数据。用户在“用户 Flash Player 信任”目录中将文件指定为受信任,该目录与 Flash 共享对象存储区域的所在目录相同,位置(特定于当前用户)如下:

这些设置只会影响当前用户,不会影响登录到计算机的其他用户。如果没有管理权限的用户在属于他们自己的系统中安装了某个应用程序,则“用户 Flash Player 信任”目录允许安装程序将该应用程序注册为该用户的受信任程序。

由于开发人员通过安装应用程序分发本地运行的 SWF 文件,因此可以让安装应用程序向“用户 Flash Player 信任”目录添加一个配置文件,为要分发的文件授予完全访问权限。即使在这种情况下,也将“用户 Flash Player 信任”目录文件视为用户控制,原因是用户操作(安装)启动了它。

此外,还有一个“全局 Flash Player 信任”目录,管理用户或安装程序可使用该目录为所有计算机用户注册应用程序(请参阅管理用户控制)。

Web 站点控制(跨域策略文件)

要使来自某个 Web 服务器的数据可用于来自其它域的 SWF 文件,可以在服务器上创建一个跨域策略文件。“跨域策略文件”是一个 XML 文件,它为服务器提供了一种方式,以指示该服务器的数据和文档可用于从某些域或所有域提供的 SWF 文件。服务器策略文件指定的域所提供的所有 SWF 文件都将被允许访问该服务器中的数据或资源。

跨域策略文件可影响对许多资源的访问,其中包括以下内容:

本章的其余部分将对以上内容提供详细介绍。

策略文件语法

下面的示例显示了一个策略文件,该文件允许访问源自 *.example.comwww.friendOfExample.com192.0.34.166 的 SWF 文件。

<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*.example.com" />
    <allow-access-from domain="www.friendOfExample.com" />
    <allow-access-from domain="192.0.34.166" />
</cross-domain-policy>

当某个 SWF 文件试图访问另一个域中的数据时,Flash Player 会尝试自动从该域加载策略文件。如果试图访问数据的 SWF 文件所在的域包括在该策略文件中,则数据将自动成为可访问数据。

默认情况下,策略文件必须命名为 crossdomain.xml,并且必须位于服务器的根目录中。但是,SWF 文件可以通过调用 Security.loadPolicyFile() 方法检查是否为其它名称或位于其它目录中。跨域策略文件仅适用于从其中加载该文件的目录及其子目录。因此,根目录中的策略文件适用于整个服务器,但是从任意子目录加载的策略文件仅适用于该目录及其子目录。

策略文件仅影响对其所在特定服务器的访问。例如,位于 https://www.adobe.com:8080/crossdomain.xml 的策略文件只适用于在端口 8080 通过 HTTPS 对 www.adobe.com 进行的数据加载调用。

跨域策略文件包含单个 <cross-domain-policy> 标签,该标签又包含零个或多个 <allow-access-from> 标签。每个 <allow-access-from> 标签包含一个属性 domain,该属性指定一个确切的 IP 地址、一个确切的域或一个通配符域(任何域)。通配符域由单个星号 (*)(匹配所有域和所有 IP 地址)或后接后缀的星号(只匹配那些以指定后缀结尾的域)表示。后缀必须以点开头。但是,带有后缀的通配符域可以匹配那些只包含后缀但不包含前导点的域。例如,foo.com 会被看作是 *.foo.com 的一部分。IP 域规范中不允许使用通配符。

如果您指定了一个 IP 地址,则只向使用 IP 语法从该 IP 地址加载的 SWF 文件(例如 http://65.57.83.12/flashmovie.swf)授予访问权限,而不向使用域名语法加载的 SWF 文件授予访问权限。Flash Player 不执行 DNS 解析。

您可以允许访问来自任何域的文档,如下面的示例所示:

<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

每个 <allow-access-from> 标签还具有可选的 secure 属性,其默认值为 true。如果您的策略文件在 HTTPS 服务器上,并且要允许非 HTTPS 服务器上的 SWF 文件从 HTTPS 服务器加载数据,则可以将此属性设置为 false

secure 属性设置为 false 可能会危及 HTTPS 提供的安全性。特别是将此属性设置为 false 时,会使安全内容受到电子欺骗和窃听攻击。Adobe 强烈建议不要将 secure 属性设置为 false

如果要加载的数据位于 HTTPS 服务器上,但是加载数据的 SWF 文件位于 HTTP 服务器上,则 Adobe 建议将要执行加载的 SWF 文件移动到 HTTPS 服务器上,以便可以使安全数据的所有副本都能得到 HTTPS 的保护。但是,如果决定必须将要执行加载的 SWF 文件保存在 HTTP 服务器上,则需将 secure="false" 属性添加到 <allow-access-from> 标签,如以下代码所示:

<allow-access-from domain="www.example.com" secure="false" /> 

不包含任何 <allow-access-from> 标签的策略文件相当于服务器上没有策略。

套接字策略文件

ActionScript 对象可实例化两种不同的服务器连接:基于文档的服务器连接和套接字连接。Loader、Sound、URLLoader 和 URLStream 等 ActionScript 对象可实例化基于文档的服务器连接,这些对象均根据 URL 加载文件。ActionScript Socket 和 XMLSocket 对象进行套接字连接,这些对象操作的是数据流而非加载的文档。Flash Player 支持两种策略文件:基于文档的策略文件和套接字策略文件。基于文档的连接需要基于文档的策略文件,套接字连接则需要套接字策略文件。

Flash Player 要求使用尝试连接希望使用的同类协议传输策略文件。例如,如果将策略文件放置在您的 HTTP 服务器上,则允许其它域中的 SWF 文件从该服务器(作为 HTTP 服务器)加载数据。但是,如果在这台服务器上未提供套接字策略文件,则禁止其它域的 SWF 文件在套接字级别连接到该服务器。检索套接字策略文件的方法必须与连接方法相匹配。

由套接字服务器提供的策略文件具有与任何其它策略文件相同的语法,只是前者还必须指定要对哪些端口授予访问权限。如果策略文件来自低于 1024 的端口号,则它可以对任何端口授予访问权限;如果策略文件来自 1024 或更高的端口,则它只能对 1024 端口和更高的端口授予访问权限。允许的端口在 <allow-access-from> 标签的 to-ports 属性中指定。单个端口号、端口范围和通配符都是允许值。

下面是一个 XMLSocket 策略文件示例:

<cross-domain-policy> 
   <allow-access-from domain="*" to-ports="507" /> 
   <allow-access-from domain="*.example.com" to-ports="507,516" /> 
   <allow-access-from domain="*.example2.com" to-ports="516-523" /> 
   <allow-access-from domain="www.example2.com" to-ports="507,516-523" /> 
   <allow-access-from domain="www.example3.com" to-ports="*" /> 
</cross-domain-policy> 

在 Flash Player 6 中首次引入策略文件时,并不支持套接字策略文件。与套接字服务器的连接由跨域策略文件所在默认位置中的一个策略文件授权,跨域策略文件位于与套接字服务器位于同一个域中的 HTTP 服务器的端口 80 上。为尽可能保留现有的服务器排列,Flash Player 9 仍然支持此功能。但是,Flash Player 现在的默认设置是在与套接字连接相同的端口上检索套接字策略文件。如果希望使用基于 HTTP 的策略文件来授权套接字连接,则必须使用如下所示代码显式请求 HTTP 策略文件:

Security.loadPolicyFile("http://socketServerHost.com/crossdomain.xml")

此外,为授权套接字连接,HTTP 策略文件只能来自跨域策略文件的默认位置,而非来自任何其它 HTTP 位置。从 HTTP 服务器获取的策略文件隐式向 1024 和所有更高端口授予套接字访问权限;HTTP 策略文件中的任何 to-ports 属性均被忽略。

有关套接字策略文件的详细信息,请参阅连接到套接字

预加载策略文件

从服务器加载数据或连接到套接字是一种异步操作,Flash Player 只是等待跨域策略文件完成下载,然后才开始主操作。但是,从图像中提取像素数据或从声音中提取采样数据是一种同步操作,跨域策略文件必须在可以提取数据之前先加载数据。加载媒体时,需要指定媒体检查是否存在跨域策略文件:

设置上述参数时,Flash Player 首先会检查是否已经为该域下载了任何策略文件。然后考虑对 Security.loadPolicyFile() 方法的任何待定调用,以便查看它们是否在范围内,如果在范围内,则等待调用完成。然后,它查找服务器上默认位置中的跨域策略文件。

作者(开发人员)控制

用于授予安全权限的主 ActionScript API 是 Security.allowDomain() 方法,它将向指定域中的 SWF 文件授予权限。在下面的示例中,SWF 文件向 www.example.com 域提供的 SWF 文件授予访问权限:

Security.allowDomain("www.example.com")

此方法为下列各项授予权限:

调用 Security.allowDomain() 方法的主要目的是为外部域中的 SWF 文件授予权限以访问调用 Security.allowDomain() 方法的 SWF 文件的脚本。有关详细信息,请参阅跨脚本访问

如果将 IP 地址指定为 Security.allowDomain() 方法的参数,则不允许任何源自该指定 IP 地址的访问方进行访问。相反,只允许 URL 中包含该指定 IP 地址的访问方进行访问,而不允许其域名映射到该 IP 地址的访问方进行访问。例如,如果域名 www.example.com 映射到 IP 地址 192.0.34.166,则对 Security.allowDomain("192.0.34.166") 的调用不会授予对 www.example.com 的访问权限。

可以将通配符“*”传递给 Security.allowDomain() 方法以允许从所有域进行访问。由于这种方式会为“所有”域中的 SWF 文件授予访问执行调用的 SWF 文件的脚本的权限,因此请谨慎使用通配符“*”

ActionScript 还包括一个权限 API,称为 Security.allowInsecureDomain()。此方法与 Security.allowDomain() 方法的作用相同,只是从安全 HTTPS 连接提供的 SWF 文件调用时,此方法还会允许非安全协议(例如 HTTP)提供的其它 SWF 文件访问执行调用的 SWF 文件。但是,在安全协议 (HTTPS) 中的文件与非安全协议(例如 HTTP)中的文件之间执行脚本访问操作并不是一种好的安全性做法;这样做会使安全内容受到电子欺骗和窃听攻击。下面是此类攻击的作用方式:由于 Security.allowInsecureDomain() 方法允许通过 HTTP 连接提供的 SWF 文件访问安全 HTTPS 数据,因此介入 HTTP 服务器和用户之间的攻击者能够将 HTTP SWF 文件替换为它们自己的文件,这样便可访问您的 HTTPS 数据。

另一种与安全性相关的重要方法是 Security.loadPolicyFile() 方法,该方法可让 Flash Player 在非标准位置检查是否存在跨域策略文件。有关详细信息,请参阅Web 站点控制(跨域策略文件)


Flash CS3

 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000349.html