理解 flash sandbox 安全机制

Flashsandbox 是用来判定当swf文件在不同网络环境(地方)哪些文件可以被访问。一个函数在客户端和服务端被执行的效果是不同的。

例如 一个swf在本地sandbox 不能同时被被本地和remote对象同时访问的。这一方法保证了程序不能被其他对象引用的安全目的。

本地文件可以选择下列三个中的一个安全沙箱:

Local-with-filesustem: 确保用户的本地内容不会被发送或共享到网络。

Local-with- networking-sandbox:允许本地swf文件被指定的远程对象(remote)调用,条件是swf检测到本地crossdomain 文件中有对应的域。

Loal-trust:任何在这个sandbox中的swf可以被任何对象调用(本地和远程)只有用户和管理员才能将swf转移到此sandbox

 

Loal-trust sandbox 是不能通过单独的swf来修改的,这种做法是为了保证用户的安全需求。

为了允许远程某个的域访问调用,你必须先调用allowDomain()函数来将其地址添加到 Security类中。

你也可以通过修改crossdomain文件来允许外部某些特殊域或通过”*”来允许全部的外部访问。<allow-access-from-domain=”*”>

 

设置sandbox种类

当你在发布swf时,你可以选择你需要的sandbox种类。步骤为:

…..

 

利用sandboxtype的不同属性

一个swf文件可以使用静态只读的安全级别。Sandbox种类的属性将决定flash player对当前swf文件所允许的操作。

在一些情况下,你可能会根据当前的sandbox种类的值来 决定程序的交互步骤。

 

Code

 

Sandboxtype可以用来干什么

判断当前的Sandboxtype 不仅仅是只能用来完成一个简单的trace动作。你也可以用这个来提醒那些未授权用户:当前swf文件不能被远程调用,他们只能在本地运行。你也可以立刻停止一个swf的运行当发现 local-sandbox时,这种情况是这个swf文件并非在你的网站上运行。例如 swf文件被从你的网站上下载,就可以采取对应措施来防止内容被窃取。

 

local-sandbox 运行程序。

下面的例子将会检查sandboxtype,当其发现swflocal-sandbox运行时 将会切断连接。

第一步是创建需要的变量

Var timer:Timer;

Var sandbox:String;

Var startingTime:uint
=5;

 

变量申请完后,你可以开始着手来构建初始化函数了,它将会在影片运行时立即被调用。

 1 Function init():void
 2 
 3 {
 4 
 5 tinerMC.alpha=0;
 6 
 7 sandbox=Security.sandboxType;
 8 
 9  
10 
11 if(sandbox.indexof(‘local’)==-1)
12 
13  {
14 
15   startTime();
16 
17 }
18 
19  
20 
21 }

 

这一部分最关键的是if判断状态,它会在当前sandoxType中检索“local”字段。这一方法试用于任何版本的检测。如果是sandboxlocal则删除,这一功能由startTimer来实现,它将初始化并开始关闭倒计时。

startTimer 函数首先是初始化一个timer的实例然后是添加监听器。函数的最后一步是展现出计时器的效果,通过设置alpha属性值为1来实现。

Function startTime():void

{

StartTime
*=1000;

 Timer
= new Timer(1,0);

Timer.addEventListener(TimerEvent.TIMER,tickHandler);

 Timer.start();

  TimerMc.alpha
=1.0;

}

事件处理函数:

Code

方法是播放剩余的秒数,剩余秒数是剩余的毫秒数转换到秒数取整得到的。

剩余毫秒数是通过getTimer()系统函数来获取的,它将返回当前影片被运行的时长(毫秒数)。

当剩余时间为0时,将停止播放。

…….

后面是程序的具体解释 就不详谈了。

…….


确保程序不被共享

上一个例子是创建一个类似于sandbox类型检查器,接下来的例子将更直接,它对未经允许的站点都是不可见的。

这一实现原理是通过在loaderInfo对象的url属性来实现的。这一属性对任何已读取对象都是可视的。本例中已读取对象是stage,因为它是最底层的displayObject。判断位置的代码如下:

If(String(stage.loadInfo.url).indexOf(‘example.org’)!=-1)

{

Stage.removeChildAt(
0);

}

 

posted on 2009-07-10 19:27  sungo  阅读(529)  评论(1编辑  收藏  举报