您的位置:首页 > 其它

Flash player 10(FLEX 4)的安全沙箱机制

2010-07-28 11:22 211 查看
注意,是Flash Player 10的安全沙箱,也就是说不仅仅是Flex编译出来的那个swf,所有的swf都遵循Adobe的白皮书。

Flash player 安全模型阻止以下三类违规行为:

• 未授权的情况下,访问数据:

本地磁盘,联机的磁盘,web服务器,内存中的数据。

• 未授权的情况下,访问终端用户信息:

可能包括个人信息和金融类数据,也包括终端用户对flash player的安全设置信息。

• 未授权的情况下,访问宿主机器的资源:

控制应用程序,设备,系统资源。


计算机系统中,正确操作、保护资源可以保证很多类型用户的利益。这在flash的安全模型中尤为重要,有的环境会从多种途径获得执行代码,比如说
flash player是adobe制作的,运行在其中的swf又是另外一个来源。而且这些环境也会从其他网站读取数据,在本机上运行程序。

在flash的运行环境中,adobe假设安全隐私和以下角色相关:

管理员:

管理员设置的flashplayer安全信息保存在mms.cfg 中。例如,访问计算机的摄像头或者音频输入设备。访问本地文件,文件上传,下载的权限。

Global Trust files当安装flash应用程序时,安装程序(以管理员角色运行)可以指定本地文件或者路径为可信的。

这指系统的最高权限用户,win下的Administrator,linux
下的root等。有两种类型的控制:
a)、mms.cfg文件:数据加载、隐私控制、Flash Player更新、旧版文件支持、本地文件安全性、全屏模式等。
b)、"全局 Flash Player
信任"目录:当某些SWF文件被指定到这个受信任的目录下时,这些SWF
文件会被分配到受信任的本地沙箱。它们可以与任何其它SWF文件进行交互,也可以从任意位置(远程或本地)加载数据。该信任目录的默认路径
为:C:/windows/system32/Macromed/Flash/FlashPlayerTrust。
用户:

设置管理器,设置UI对话框。摄像头和音频设备的访问。当遗留flash应用程序试图在新的flash player中访问受保护的资源时,flash player会给用户发出警告。

User Trust files 当安装flash应用程序时,安装程序可以指定本地文件或者路径为可信的。

相对于第1种,这里的用户是指普通用户。有这三种类型的控制:
a)、摄像头与麦克风设置:还记得ClickJacking的那个Flash DEMO么?
b)、共享对象存储设置:就是那个SharedObject了。
c)、相对与"全局 Flash Player 信任"目录,用户权限这也有个"用户 Flash Player 信任"目录。默认路径:C:/Documents and Settings/JohnD/Application Data/Macromedia/Flash Player/#Security/FlashPlayerTrust。

网站管理员:

URL策略文件,决定了flash应用程序是否可以访问domain上的资源。

Socket策略文件,授权给ActionScript socket层的链接。

URL元策略和socket元策略,元策略是一个“策略上的策略”,由管理员设置,它决定了什么策略文件是允许在server上存在的。

就是家喻户晓的crossdomain.xml文件了,现在的安全策略是该文件只能存放在站点根目录下了,文件格式如:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

作者:

跨脚本API和跨domain数据访问,flash player提供安全访问的API 。

开发者可以通过编码(在AS脚本中)指定允许的安全控制权限,如:
Security.allowDomain("www.xeye.us");

Flash Player 安全体系架构

基本的sandbox安全模型

沙箱是flash player用来容纳程序资源的逻辑安全组。沙箱中的资源都由沙箱的所有者控制的。沙箱是独立于操作系统、文件系统、网络和其他应用程序的。

当flash player载入swf文件时,程序被自动分配到特定的沙箱之中。在同一沙箱中运行的程序可以自由的交互。如果对安全规则进行了相应的设置,不同砂箱中的程序也可以交互。

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进行通信。

在默认的安全沙箱中,a.com中的swf可以访问同domain下的所有资源,例如a1.swf可以读取a2.swf,也可以读取a3、a4文件。

但是不同域下的资源不可以互相访问,例如a.com上面的swf只可以发送信息到b.com,但是不能读取b.com下的任何资源。

只有b.com设置了策略文件,允许a.com访问它,才能保证来自a.com的swf文件可以访问b.com的资源(比如,使用ActionScript URLLoader.load())。

只有b.com的swf使用Security.allowDomain()方法,允许a.com访问(例如调用b.com中swf的ActionScript代码),这样,来自a.com的swf才可以访问b.com下的swf。

特定范围的沙箱机制

网络文件:
所有的资源都在网络沙箱模型中,该模型符合基本安全沙箱模型。并且每个domain的资源都会被分配到相应的沙箱之中。

本地文件:
本地文件沙箱也符合基本安全沙箱模型,但是他们有不同的缺省设置。文件地址符合“file://”或者UNC路径(统一命名规约),并且不包含IP地址或者域名的文件,被认为是本地文件。

三种本地文件沙箱模型:

• local-with-filesystem

• local-with-networking

• local-trusted

默认情况下,本地的swf都会被放在local-with-filesystem沙箱中运行,该沙箱中的程序可以访问本地资源,但是不能访问网络资源,除非系统认为网络资源是本地文件。



地swf在编译的时候,加入编译参数use-network=true,运行时该文件就会被放入local-with-networking沙箱。默认情
况下,此沙箱中的swf也是不可以访问其他swf文件的脚本来执行的,只有通过Security.allowDomain()才可以访问在local-

with-networking沙箱或者local-trusted沙箱中的swf文件。但是local-with-file-system是不可以的,
这是为了防止本地swf文件和网络swf配合盗取本机数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: