X

绕过flash安全沙箱限制(security sandbox)读取可视对象数据

问题描述

当我们加载外部域的图片或swf,并且想对其内容进去操作时报一个flash安全沙箱错误。
类似这样的:

SecurityError: Error #2122: 安全沙箱冲突:Loader.content:http://www.litefeel.com/crossSecurityBoxDemo.swf 不能访问 https://lite3-resouce.googlecode.com/svn/trunk/assets/image/duck.jpg。需要一个策略文件(crossdomain.xml),但在加载此媒体时未设置 checkPolicyFile 标志。

有这样几种安全沙箱错误:

  • 需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志。
  • 有一个策略文件,但未被授权访问或拒绝访问。
  • 加载swf并要脚本互访时,未被授权访问,可以用Security.allowDomain解决。

解决方法

  • 用Adobe建议的方法,添加策略文件,添加Security.allowDomain。
  • 通过loadBytes绕过安全沙箱。

第一种方法是常规的方法,但是很多时候我们加载的图片不是自己的,对方服务器肯定不会给我们授权的。
那么这时第二种方法就派上用场了。
下面先看个demo再看源码。

这是一个绕过flash的安全沙箱的demo,如果你看不到这个flash,请到文章页面查看!

核心代码为

private function completeHandler(e:Event):void
{
    try {
        loader.content;
    }catch (err:SecurityError)
    {
        loader.loadBytes(loader.contentLoaderInfo.bytes);
    }
}

2012年12月21日更新:
release版的不能绕过安全沙箱获取可视对象的数据。
由于之前只在debug版的flash player测试过。对于release版的没测试过,现在用release版测试,如果没有策略文件的话loader.contentLoaderInfo.bytes会是null,也就是说在release版用此方法不可行。
不知道以前的release版能不能绕过,但是现在是不能绕过了,又少了一条路啊。

示例源码下载

This post was last modified on 2019 年 03 月 04 日 00:57

View Comments (18)

This website uses cookies.