理解 flash 的 sandbox 安全机制
Flash的sandbox 是用来判定当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种类的值来 决定程序的交互步骤。
Sandboxtype可以用来干什么
判断当前的Sandboxtype 不仅仅是只能用来完成一个简单的trace动作。你也可以用这个来提醒那些未授权用户:当前swf文件不能被远程调用,他们只能在本地运行。你也可以立刻停止一个swf的运行当发现 local-sandbox时,这种情况是这个swf文件并非在你的网站上运行。例如 swf文件被从你的网站上下载,就可以采取对应措施来防止内容被窃取。
在local-sandbox 运行程序。
下面的例子将会检查sandboxtype,当其发现swf被local-sandbox运行时 将会切断连接。
第一步是创建需要的变量
变量申请完后,你可以开始着手来构建初始化函数了,它将会在影片运行时立即被调用。
这一部分最关键的是if判断状态,它会在当前sandoxType中检索“local”字段。这一方法试用于任何版本的检测。如果是sandbox是local则删除,这一功能由startTimer来实现,它将初始化并开始关闭倒计时。
startTimer 函数首先是初始化一个timer的实例然后是添加监听器。函数的最后一步是展现出计时器的效果,通过设置alpha属性值为1来实现。
事件处理函数:
方法是播放剩余的秒数,剩余秒数是剩余的毫秒数转换到秒数取整得到的。
剩余毫秒数是通过getTimer()系统函数来获取的,它将返回当前影片被运行的时长(毫秒数)。
当剩余时间为0时,将停止播放。
…….
后面是程序的具体解释 就不详谈了。
…….
确保程序不被共享
上一个例子是创建一个类似于sandbox类型检查器,接下来的例子将更直接,它对未经允许的站点都是不可见的。
这一实现原理是通过在loaderInfo对象的url属性来实现的。这一属性对任何已读取对象都是可视的。本例中已读取对象是stage,因为它是最底层的displayObject。判断位置的代码如下: