Home » 程序开发 » Flash » 绕过flash安全沙箱限制(security sandbox)读取可视对象数据

绕过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版能不能绕过,但是现在是不能绕过了,又少了一条路啊。

示例源码下载

  1. |

    没有办法加载XML了,用loader对于xml加载不了啊。xml是别的网站的偶

  2. | |

    @yzyyzy163
    恩,是的,因为视觉对象是不需要策略文件的,但是数据就需要策略文件,要是xml这样是纯数据的就绕不过去了

  3. |

    这个方法不错, :grin: 学习了。

  4. | |

    很不错!

  5. | |

    Truly interestin details. Im happy I identified this submit. Thank you for sharing

  6. | |

    @used golf clubs
    no thanks. :razz:

  7. | |

    现在才知道可以这样。 :grin:

  8. | |

    @Y.Boy
    赞一下!

  9. | |

    @Y.Boy
    :grin:

  10. |

    可以用urlloader解决安全沙箱吗?@lite3

  11. | |

    @yzyyzy163
    URLLoader是加载数据的,如果有安全沙箱并且没有策略权限,那么一开始就不能加载成功,所以URLLoader是不行的 :roll:

  12. | |

    @Y.Boy 赞一下!

  13. | |

    可以用urlloader解决安全沙箱吗?@lite3

  14. | |

    @Marisol Perry
    URLLoader是加载数据的,如果有安全沙箱并且没有策略权限,那么一开始就不能加载成功,所以URLLoader是不行的

  15. |

    请问下载dat,或者zip也可以用第二种方法么

  16. | |

    @1111
    dat,zip这些都是数据类型,只有视听类型的才能绕过安全沙箱,对于数据类型的,还是老老实实的用crossdomain.xml(策略文件)吧

  17. |

    @lite3
    谢谢了,现在通过别的方法解决了 blog不错haha

  18. | |

    @1111
    不知道是通过别的什么方法,能否分享下呢

回到顶部