593249217
总版主
总版主
  • 注册日期2010-11-25
  • 发帖数385
  • QQ593249217
  • 火币969枚
  • 粉丝282
  • 关注1
  • 优秀斑竹奖
  • 特殊贡献奖
  • 幽默大师奖
  • 社区明星
阅读:4484回复:0

Flash的安全沙箱

楼主#
更多 发布于:2010-11-26 17:43
Flash的安全沙箱
几个月前从学校图书馆借了本Flex与AS3编程的书,我看书的速度还是挺快的,因为我只看能够吸引我的知识,Flex中我一般不会去看的是设计这块,最多了解了解,虽然我对设计还是比较感兴趣。这书,我是在地铁上,酒吧内翻翻看看的,这里得做下笔记,以免一年后我都不知道自己“相对”系统地了解过这个。恩,既然我这次笔记有涉及到Flex,那么先说说Flex的最重要两个文件:MXML文件与AS文件。

MXML与AS的hello world,如何编译这就不说了(还有Flex与Flash什么区别等等这些基本点都不用提了):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        Alert.show("hello world");
    ]]>
  </mx:Script>
</mx:Application>

MXML文件其实就是个XML文件,其内可以使用<mx:Script></mx:Script>这样的标签来内嵌AS脚本(就像HTML文件中<script></script>标签内写JS一样)。除了可以使用import来动态导入Flex与Flash的模块(可以理解为就是个as文件)外,还可以使用下面两种方式导入as文件:

<mx:Script source="hello.as"/>



<mx:Script>
  <![CDATA[
    include "hello.as";
  ]]>
</mx:Script>

说这些的目的是因为在浏览器的客户端应用上,除了JS还有什么脚本是值得关注的?那就是AS了,同样很重要的逻辑控制部分!而界面展示上,此时MXML与HTML就类似了(看上面,看上面,自己类比下):)。RIA不是已经炒作很火热了吗?Flex就是致力于RIA的应用,Adobe为了扩大战场,推出了AIR环境,那么此时采用Flex编写的程序在浏览器中与桌面环境下都可以很好的移植了。像Flex与Flash这样奇怪的东西,战场不仅仅在浏览器上,还跑到了桌面环境下。一个很重要的安全模型就被提出了:Flash的安全沙箱。要是没这样的安全策略,恐怕这个世界就不安宁了,当然初期,这个世界本身就不安宁(我接触Flash时,那时还是5.0、6.0版本的,那是04年,我刚上大学的时候……)。这样的策略是这些年逐渐完善的。

其实说Flash的安全沙箱就包含进Flex了,因为本质都是Flash,都是运行在Flash Player这个容器中的,Flex仅仅是将程序员与设计人员分离了而已。

进入本次的主题- -。。

因为是笔记,所以不会详细,而且这些笔记来自我看的书籍与资料(这似乎是废话)。

安全沙箱包括:远程沙箱与本地沙箱。其实这个沙箱模型类似与浏览器中的同源策略。在同一域内的资源会被放到一个安全组下,这个安全组就被称为安全沙箱了。

在深入了解沙箱之前先得明确Flash Player的权限控制(我还是按照Flash CS3上的中文官方文档的名词来划分吧):

1、管理用户控制:

这指系统的最高权限用户,win下的Administrator,linux下的root等。有两种类型的控制:

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

2、用户控制:

相对于第1种,这里的用户是指普通用户。有这三种类型的控制:

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

3、web 站点控制(跨域策略文件):

就是家喻户晓的crossdomain.xml文件了,现在的安全策略是该文件只能存放在站点根目录下了,文件格式如:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

随便看个例子http://fanfou.com/crossdomain.xml。通过该文件的配置可以提供允许的域跨域访问本域上内容的权限。

4、作者(开发人员)控制:

开发者可以通过编码(在AS脚本中)指定允许的安全控制权限,如:

Security.allowDomain("www.xeye.us");

当然都支持通配符*了。这个通配符真是个瘟神,程序员可得谨慎使用,以免添加不必要的安全风险。

好,Flash Player的权限控制明了之后,现在可以来看看安全沙箱了。

1、远程沙箱:

这个远程沙箱控制着远程域上,浏览器环境中的安全策略,比http://xeye.us/域中的Flash文件就无法单刀直入地http://hi.baidu.com/ycosxhack域上的Flash文件交互。同一个域(严格域)下的所有文件属于一个沙箱,沙箱内的对象是可以互相返回,而沙箱之间的对象需要交互的话,得靠上面介绍的权限控制的“Web 站点控制(跨域策略文件)”与“作者(开发人员)控制”进行了。

2、本地沙箱:

出来个本地沙箱,没办法,Flash与Flex文件可以在我们的桌面环境下运行。如果没有个很好的安全策略来限制这些功能不弱的AS脚本的话,那绝对是很危险的事。

它有三种类型:

a)、只能与本地文件系统内容交互的本地沙箱:顾名思义,就是该Flash文件在本地运行时是不能与网络上的对象进行通信的,而只能与本地对象进行交互。
b)、只能与远程内容交互的本地沙箱:还是顾名思义,此时的Flash文件要与远程域对象交互时,需在远程域上通过策略文件或以Security.allowDomain编码方式来设置访问策略(同远程沙箱)。此时不能访问本地文件。
c)、受信任的本地沙箱:完美了,上面介绍的权限控制中,管理用户与普通用户都有Flash Player信任目录的控制权限,只要将我们的SWF文件放到受信任目录内运行,那么这个Flash文件就可以与本地域和远程域通信了:)。

当然以上这些沙箱类型,我们可以通过编码来确定当前运行的Flash文件被分配到什么类型的沙箱中。还是通过Security类:Security.sandboxType,值:

Security.REMOTE(远程沙箱)
Security.LOCAL_WITH_FILE(只能与本地文件系统内容交互的本地沙箱)
Security.LOCAL_WITH_NETWORK(只能与远程内容交互的本地沙箱)
Security.LOCAL_TRUSTED(受信任的本地沙箱)

恩,Flash的安全沙箱就是这些笔记了,写到这,还不得不提下Flash的一些其他安全问题。这些安全问题大多围绕安全沙箱进行。

在我们发布Flash时生成的HTML文件内,<object>与<embed>标签内的几个属性需要明确的。

allowNetworking:

该参数控制Flash文件的网络访问功能。有三个值:all(所有的网络API都可用)、internal(除了不能使用浏览器导航和浏览器交互的API外,其它的都可用)、none(所以网络API都不可用)。

allowScriptAccess:

这是AS与JS通信的安全控制,还记得ExternalInterface的作用吗。有三个值:never(ExternalInterface的call方法不能与HTML的JS脚本进行通信)、sameDomain(同域内就可以了,这是默认值)、always(这个就允许所有域了,比较危险)。

allowFullScreen:

全屏模式的安全问题,这是一个boolean值,默认为false,不允许Flash全屏。全屏带来的安全问题莫非是用户界面欺骗这样的类型?我不是很清楚。

上面这三个属性得区分好了啊。安全问题不仅这点,还有比如LocalConnetion的本地通信、共享对象SharedObject的使用、E4X在AS中的使用、其它的Socket通信、一些网络API,比如全局的navigateToURL、Flash与其它非Flash的外部对象的通信问题等等。这些安全问题大都围绕安全沙箱进行。Flash或者Flex文件可以做得很漂亮,很精彩,比如那些非常优秀的Flash动画与游戏,然而一定得时刻保持警惕。

喜欢0 评分0
多一分钟时间学习,就多一份技术!
游客

返回顶部