listly的空间

我们一直在努力....

解决flash安全沙箱的几种方法总结

标签: 安全沙箱 flash
对于flash安全沙箱问题.有很多种不同的出错方式,有可能性是你的as脚本出错,也有可能是你从网上下载的flash资源没有权限阅读等...都有可能会出现"flash安全沙箱问题".本文主要是讲了几几种解决flash安全沙箱的方法.
 
 解决”安全沙箱冲突”的第一种方法:是通过配置跨域文件来实现的.

调用不同域的对象或变量需要 allowDomain,如下:
System.security.allowDomain("www.zhugao.cn");
loadMovie("http://www.zhugao.cn/images/links/links_zhugao.jpg", my_mc);

注意,“www.zhugao.cn”和“zhugao.cn”不是相同域,根据目标而定。例如 loadMovie("http://player.zhugao.cn/***.jpg", my_mc); 那么 allowDomain 的应该是 player.zhugao.cn,而不是 zhugao.cn,也不是 www.zhugao.cn

如果要允许多个域,可以用逗号隔开:
System.security.allowDomain("www.zhugao.cn", "zhugao.cn", "player.zhugao.cn");

播放器在 8.0 以上可以使用通配符 “*” 来允许所有域:
System.security.allowDomain("*");  


解决:”FLASH3.0安全沙箱问题的方法二
利用JS脚本绕过安全沙箱(有待验证,如果可以也不失为一种体面的解决办法!)

Flash作为一种客户端的前台脚本技术,本来是不应该赋予更强大的功能的。

但是随着Flash技术的发展,目前已然能够读xml文件,载入多媒体内容,

甚至直接与服务器端进行Socket通信。

当然,这些还不够,Flash与js,Flash与Flash之间也已然实现了交互通信。

这样导致的结果就是带来了大量令人头疼的安全问题。

于是Flash在它的AS3.0里提出了安全沙箱这一概念。

在未经授权的情况下,Flash默认状态是不允许进行跨域通信的,这样就使得Flash的安全可靠性得到了提高。

可同时也带来了意想不到的麻烦:我制作了一个Flash,在页面中用js脚本控制as脚本,然后使用FlashCS3的发布功能发布了该Flash,

上传到网站上后,问题出现了,此时Flash无论执行任何访问外界的as脚本均会提示安全沙箱问题!

即使是打开链接地址也会出现警告!

解决的办法很简单,连我自己后来都觉得很诧异:将调用Flash的参数:allowScriptAccess的值改为always即可。

例如:<param name="allowScriptAccess" value="always" />

用js来控制Flash的安全访问?是不是有点自欺欺人?
 
解决安全沙箱冲突的方法三:使用Asp.Net绕过As3的跨域安全沙箱
完全的文件转发,以极低的效率来解决了问题,基本无实用价值.作者有大段的代码就没有全部复制,请根据上面引用详细阅读。
As3的SandBox这点上有点让人感觉非常郁闷。

如果要取不同域上的文件(比如歌曲,图片等),当对方服务器没有crossdomain.xml的时候就会出现安全沙箱错误。

这点有点郁闷。

中午午饭后,想到这个问题,于是用Asp.Net写了个Web Proxy。通过Asp.Net进行资源的转发,解决了跨域的安全沙箱问题。

不过这个东东会加大服务器的带宽和计算压力~

解决安全沙箱冲突的方法四:一种猥琐的图片跨域的方法似乎是利用了Flex本身的疏漏来达到特定访问图片的方法,但由于作者代码的不完全,作为初学的我还无法完全理解他的思路,还请大家指教这个。

今天看到达达(ASFlex)的博文,关于跨域的问题,突然想起来我之前[原]淘宝店家起义篇。。。要做的实验之一,遂趁当前下班时间,在公司里写了一段测试代码。

果然是无法Draw的,在帮助文档已经明确的写了......................................

如何突破呢? 还是以后直接拿TextField来用?

以此标记,下回,改用AVM1+AVM2混合内容测试

目前方法是猥琐的抽出Loader来用

测试连接:
www.xintend.com/temp/icd/index.html

有兴趣的同学可以去玩下~~ 图片可以拖动~~~~~~~

核心 代码部分:


01. function handleLoadBtn():void {  
02.            var s:String = urlInput.text;  
03.            var ht:String = "<img src='";  
04.            if (s.length > 0) {  
05.                ht += s;                                 
06.                ht += "' ";  
07.                ht += "id='image'>";  
08.                tf.htmlText = ht;  
09.                output.text = ht;  
10.                output.text += "\n";                  
11.                output.text += tf.getImageReference("image");  
12.                var c:DisplayObject = tf.getImageReference("image");  1
3.                ui.addChild(c);  
14.                output.text += "\n ui.addChild(c);";  
15.            }  
16.        }


解决本地的安全沙箱,我本地测试的时候倒没遇到过!
经常在本机调试flash的时候,会报安全沙箱问题,除了去adobe的网站(www.macromedia.com/suppor ... ings_manager04.html)上添加本机的目录外,还可以有一种更简单的办法,

在C:\windows\system32\Macromed\Flash\FlashPlayerTrust 下面,添加一个txt文件,例如songhuan .txt,然后在里面添加你的本机的目录,例如f:\songhuan\ 或者c:\都可以。以后在哪里报错了,就在这个文件里添加路径就可以了。  
解决安全沙箱冲突的第一种方法:是通过配置跨域文件来实现的,但因为作者未写明细节,所以看不出配置文件所在的域是A还是B

刚才 load 一张网络上的图片,发现不能用 setMask 对其遮罩,trace 出现“安全沙箱冲突”。知道原因就好办了,调用不同域的对象或变量需要 allowDomain,如下:

System.security.allowDomain("www.zhugao.cn");
loadMovie("http://www.zhugao.cn/images/links/links_zhugao.jpg", my_mc);

注意,“www.zhugao.cn”和“zhugao.cn”不是相同域,根据目标而定。例如 loadMovie("http://player.zhugao.cn/***.jpg", my_mc); 那么 allowDomain 的应该是 player.zhugao.cn,而不是 zhugao.cn,也不是 www.zhugao.cn

如果要允许多个域,可以用逗号隔开:
System.security.allowDomain("www.zhugao.cn", "zhugao.cn", "player.zhugao.cn");

播放器在 8.0 以上可以使用通配符 “*” 来允许所有域:
System.security.allowDomain("*");  


解决:”FLASH3.0安全沙箱问题的方法二
利用JS脚本绕过安全沙箱(有待验证,如果可以也不失为一种体面的解决办法!)

Flash作为一种客户端的前台脚本技术,本来是不应该赋予更强大的功能的。

但是随着Flash技术的发展,目前已然能够读xml文件,载入多媒体内容,

甚至直接与服务器端进行Socket通信。

当然,这些还不够,Flash与js,Flash与Flash之间也已然实现了交互通信。

这样导致的结果就是带来了大量令人头疼的安全问题。

于是Flash在它的AS3.0里提出了安全沙箱这一概念。

在未经授权的情况下,Flash默认状态是不允许进行跨域通信的,这样就使得Flash的安全可靠性得到了提高。

可同时也带来了意想不到的麻烦:我制作了一个Flash,在页面中用js脚本控制as脚本,然后使用FlashCS3的发布功能发布了该Flash,

上传到网站上后,问题出现了,此时Flash无论执行任何访问外界的as脚本均会提示安全沙箱问题!

即使是打开链接地址也会出现警告!

解决的办法很简单,连我自己后来都觉得很诧异:将调用Flash的参数:allowScriptAccess的值改为always即可。

例如:<param name="allowScriptAccess" value="always" />

用js来控制Flash的安全访问?是不是有点自欺欺人?
 
解决安全沙箱冲突的方法三:使用Asp.Net绕过As3的跨域安全沙箱
完全的文件转发,以极低的效率来解决了问题,基本无实用价值.作者有大段的代码就没有全部复制,请根据上面引用详细阅读。
As3的SandBox这点上有点让人感觉非常郁闷。

如果要取不同域上的文件(比如歌曲,图片等),当对方服务器没有crossdomain.xml的时候就会出现安全沙箱错误。

这点有点郁闷。

中午午饭后,想到这个问题,于是用Asp.Net写了个Web Proxy。通过Asp.Net进行资源的转发,解决了跨域的安全沙箱问题。

不过这个东东会加大服务器的带宽和计算压力~

解决安全沙箱的方法四:一种猥琐的图片跨域的方法似乎是利用了Flex本身的疏漏来达到特定访问图片的方法,但由于作者代码的不完全,作为初学的我还无法完全理解他的思路,还请大家指教这个。

今天看到达达(ASFlex)的博文,关于跨域的问题,突然想起来我之前[原]淘宝店家起义篇。。。要做的实验之一,遂趁当前下班时间,在公司里写了一段测试代码。

果然是无法Draw的,在帮助文档已经明确的写了......................................

如何突破呢? 还是以后直接拿TextField来用?

以此标记,下回,改用AVM1+AVM2混合内容测试

目前方法是猥琐的抽出Loader来用

测试连接:
www.xintend.com/temp/icd/index.html

有兴趣的同学可以去玩下~~ 图片可以拖动~~~~~~~

核心 代码部分:


01. function handleLoadBtn():void {  
02.            var s:String = urlInput.text;  
03.            var ht:String = "<img src='";  
04.            if (s.length > 0) {  
05.                ht += s;                                 
06.                ht += "' ";  
07.                ht += "id='image'>";  
08.                tf.htmlText = ht;  
09.                output.text = ht;  
10.                output.text += "\n";                  
11.                output.text += tf.getImageReference("image");  
12.                var c:DisplayObject = tf.getImageReference("image");  1
3.                ui.addChild(c);  
14.                output.text += "\n ui.addChild(c);";  
15.            }  
16.        }


解决本地的安全沙箱,我本地测试的时候倒没遇到过!
经常在本机调试flash的时候,会报安全沙箱问题,除了去adobe的网站(www.macromedia.com/suppor ... ings_manager04.html)上添加本机的目录外,还可以有一种更简单的办法,

在C:\windows\system32\Macromed\Flash\FlashPlayerTrust 下面,添加一个txt文件,例如songhuan .txt,然后在里面添加你的本机的目录,例如f:\songhuan\ 或者c:\都可以。以后在哪里报错了,就在这个文件里添加路径就可以了。
 

     关于flash安全沙箱的问题我也是不久前做flash遇到的问题,搜集了以上几种解决flash安全沙箱问题的方法,如有出错之处请各位高手指点留言.


    分享: 收藏到CSDN 收藏到javaeye 收藏到博客园 收藏&分享
  • 浏览 (2314)
  • 评论 (0)
  • 发表于 2009-10-15 17:15
  • flash
    评分: 请先登录再投票,同一篇博客一月只能投票一次!
    无人投票

相关博客:


评论


发表评论

最近访客
关注此文的人们还关注