注意,是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应用程序时,安装程序(以管理员角色运行)可以指定本地文件或者路径为可信的。
用户:
设置管理器,设置UI对话框。摄像头和音频设备的访问。当遗留flash应用程序试图在新的flash player中访问受保护的资源时,flash player会给用户发出警告。
User Trust files 当安装flash应用程序时,安装程序可以指定本地文件或者路径为可信的。
网站管理员:
URL策略文件,决定了flash应用程序是否可以访问domain上的资源。
Socket策略文件,授权给ActionScript socket层的链接。
URL元策略和socket元策略,元策略是一个“策略上的策略”,由管理员设置,它决定了什么策略文件是允许在server上存在的。
作者:
跨脚本API和跨domain数据访问,flash player提供安全访问的API 。
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配合盗取本机数据。