一、内容载入许可

Flash可以载入SWF文件、图像、声音、以及视频。针对不同的载入内容以及被载入内容的来源文件,Flash Player将采取不同的载入安全性检查。这些检查与SWF所处的安全沙箱有关、与SWF来源的安全域有关。载入Flash内容时需要注意如下几点:

1.处于受信任的本地文件安全沙箱中的SWF,仅可以载入本地文件系统中的Flash内容,但不能载入外部网络中的Flash内容。

2.处于远程安全沙箱中的SWF和处于本地受信任的网络安全沙箱中的SWF,仅可以载入外部网络中的Flash内容,不可以载入本地文件系统中的Flash内容。

3.处于受信任的本地安全沙箱中的SWF,即可以载入本地文件系统中的Flash内容,也可以载入外部网络中的Flash内容。

通过输出Security类的sandboxType属性值查看当前SWF处于何种安全沙箱。

sandboxType

属性  
sandboxType:String  [只读]

表示其中正在运行执行调用的 文件的安全沙箱的类型。

Security.sandboxType 具有下列值之一:

  • remote (Security.REMOTE):此文件来自 Internet URL,并在基于域的沙箱规则下运行。
  • localWithFile (Security.LOCAL_WITH_FILE):此文件是本地文件,尚未受到用户信任,且不是使用网络名称进行发布的 SWF 文件。此 文件可以从本地数据源读取数据,但不能与 Internet 进行通信。
  • localWithNetwork (Security.LOCAL_WITH_NETWORK):此 SWF 文件是本地文件,尚未受到用户信任,且已使用网络名称进行发布。此 SWF 文件可与 Internet 通信,但不能从本地数据源读取数据。
  • localTrusted (Security.LOCAL_TRUSTED):此文件是本地文件,并且用户已经使用 Flash Player“设置管理器”或 FlashPlayerTrust 配置文件将其设置为受信任的文件。此 文件既可以从本地数据源读取数据,也可以与 Internet 进行通信。
  • application (Security.APPLICATION):此文件在 AIR 应用程序中运行,并且随该应用程序的包(AIR 文件)一起安装。默认情况下,AIR 应用程序沙箱中的文件可以跨脚本访问任何域中的任何文件(尽管不允许 AIR 应用程序沙箱以外的文件跨脚本访问 AIR 文件)。默认情况下,AIR 应用程序沙箱中的文件可以加载任何域中的内容和数据。

二、文本载入与socket通信

文本数据包括名值对数据、XML数据、服务端的页面等,这些类型的数据需要通过URLLoader对象和URLStream对象载入。它们的载入过程受到由站点管理员配置的交叉域访问的策略文件控制。只有在策略文件中授权的安全域才可以载入当前安全域中的文本数据。

策略方件crossdomain.xml需要放在服务器根目录下,当Flash Player试图载入文本数据前会查看对方站点上的策略文件。如果SWF所在的安全域在策略文件的授权访问内,那么FlashPlayer开始载入文本数据。否则,SWF将无法载入对方站点的文本数据。策略文件的格式如下:

<?xml version="1.0"?>
<cross-domain-policy>
 <allow-access-from domain="127.0.0.1" to-ports="20-65535"/>

<allow-access-from domain="127.0.0.1" to-ports="20-65535"/>

<allow-access-from domain="*" to-ports="8080"/>
</cross-domain-policy>

domain属性用于说明允许访问当前站点数据的其他安全域的名称。to-ports用于指示对应安全域的许可端口。端口范围可以使用“-”字符指出其范围,多个范围或多个端口用逗号分隔。

socket通信也使用同样的策略文件指示允许被连接的安全域以及与其对应的端口。在socket调用连接方法时,Flash Player将首先在将要连接的远程主机端口上自动检索策略文件。策略文件被载入后,Flash Player将根据策略文件中的配置信息判断是否允许连接。

三、跨脚本访问

交叉域条件下的SWF跨脚本访问并不受到策略文件的约束。默认情况下,交叉域的跨脚本访问是不被请允许的。来自www.a.com的a.swf文件可以载入来自www.b.com的b.swf文件,但a.swf文件无法访问b.swf文件中的数据。只有a.swf文件得到了b.swf文件的授权,a.swf文件才可以访问b.swf文件中的数据。授权交叉域的跨脚本访问使用Security类的allowDomain()方法。

Security.allowDomain("www.a.com");

以上代码被b.swf执行后,b.swf将允许a.swf对其进行跨脚本访问。该语句不仅允许a.swf访问b.swf中的数据,同时允许www.a.com中的页面包含b.swf并在页面中通过JavaScript对b.swf进行相关调用。

 

源文链接:http://www.cnblogs.com/cc523/p/3595389.html