`
qq123zhz
  • 浏览: 530827 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

安全沙箱问题

    博客分类:
  • Flex
阅读更多

某个列表flash页面需要支持gravatar的头像
(gravatar的跨域策略文件位于http://www.gravatar.com/avatar/crossdomain.xml)
在加载他们提供的图片头像时我遇到了安全沙箱冲突,错误信息是:

SecurityError: Error #2123: 安全沙箱冲突:Loader.content:http://www.**********/lib.swf 不能访问 http://www.gravatar.com/avatar/3b3be63a4c2a439b013787721dfce802.jpg?s=26&d=monsterid。未被授权访问任何策略文件。
at flash.display::Loader/get content()
at org.mousebomb.srcloader::SwfLoader/onLoadComplete()

一开始我以为是要Crossdomain文件的,我加上了Security.loadPolicyFile(“http://www.gravatar.com/avatar/crossdomain.xml”); 尝试,无效。
其实并不需要的——我只是要发布到网站后跨域读取并显示图片,这在远程网络域中,是直接允许以只读方式访问视听媒体内容的

后来单独写了一个文件,用Loader测试了一下可以正常读取并显示图片的。
这样想起来原来导致安全错误的原因在于我所使用的资源加载器,资源池的最终工作单位中Loader是每次加载完成一个就把此视觉对象抛出,然后unload以便再次接受新任务。
片段代码:

_isFree = true; 
            var _loadedData : DisplayObject = _loader.content; 
            _loader.unload(); 
            var outEvent : SrcloaderEvent = new SrcloaderEvent(SrcloaderEvent.COMPLETE, {key:_key, type:_type, data:_loadedData}); 
            this.dispatchEvent(outEvent);
 

这样的抛出视觉对象(错误出现在_loader.content这句)被 Flashplayer看作为“跨域数据处理” ,违反了只读的许可,是不允许的。

解决方案

这部分直接换成Loader来加载显示就行了。
针对跨域视听媒体对象的显示与读取只能用Loader直接做容器。

[11.8补充]

根据我的理解,远程网络域的图像要想进行处理(draw之类),只要服务器上有跨域策略文件标明允许,且loaderContext读取了此策略文件就可以的,但事实上,还是无法操作。
也许是对安全策略还不够了解,上次的问题虽然解决了却没有深入研究。

今天群里有个兄台(pickgliss)为解决问题,提出这样的方式绕过Loader加载来的图片无法draw、无法操作BitmapData的问题:
先用URLLoader以二进制方式加载图片,然后用Loader.loadBytes加载为显示对象。
我在后面加上draw位图和smoothing来测试,果然可行!

注意:此方法适用于远程服务器上有跨域安全策略赋予权限,但依然无法操作显示对象。不适用于没有跨域安全策略、或者策略文件不允许的情况。

如何绕过安全错误例:

package  
{ 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.DisplayObject; 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLLoader; 
    import flash.net.URLLoaderDataFormat; 
    import flash.net.URLRequest; 
    import flash.utils.ByteArray; 
  
    public class Test extends Sprite 
    { 
        public function Test() 
        { 
            var req : URLRequest = new URLRequest("http://uc.discuz.net/data/avatar/001/29/18/69_avatar_middle.jpg"); 
            var loader : URLLoader = new URLLoader(req); 
            loader.dataFormat = URLLoaderDataFormat.BINARY; 
            loader.addEventListener(Event.COMPLETE, __complete); 
        } 
  
        private function __complete(e : Event) : void 
        { 
            var data : ByteArray = e.target.data; 
            var loader : Loader = new Loader(); 
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageDataComplete); 
            loader.loadBytes(data); 
            
        } 
  
        private function imageDataComplete(e : Event) : void 
        { 
            var dio : DisplayObject = e.target.content; 
            var bmp : Bitmap = new Bitmap(new BitmapData(dio.width, dio.height),"auto",true); 
            bmp.bitmapData.draw(dio); 
            bmp.x = 100; 
            bmp.y = 100; 
            bmp.width = 50; 
            bmp.height = 50; 
            addChild(bmp); 
        } 
    } 
}

 

分享到:
评论

相关推荐

    ArcGIS API for Flex开发WebGIS中的安全沙箱问题

    在使用ArcGIS API for Flex开发WebGIS应用时,安全沙箱问题是一个重要的考虑因素,它涉及到数据的安全性和应用程序的跨域访问控制。Flex是Adobe Flash平台的一部分,用于创建丰富的互联网应用,而ArcGIS API for ...

    java ,c#,delphi 解决flash安全沙箱问题

    当我们面临“Java, C#, Delphi 解决 Flash 安全沙箱问题”的场景时,这意味着我们需要在这些编程语言中处理与 Flash 沙箱相关的安全问题,以确保应用程序的安全性和合规性。 首先,让我们深入了解一下 Flash 的安全...

    java和as3 socket通信 解决安全沙箱问题

    本文将深入探讨如何实现这两种语言间的Socket通信,并解决在Flash Player的安全沙箱问题。 首先,让我们理解什么是Socket通信。Socket是网络编程中的一个概念,它允许两个程序通过TCP/IP协议进行双向通信。在Java中...

    源于FLEX中的安全沙箱问题

    【标题】:“源于FLEX中的安全沙箱问题” 【描述】:在FLASH PLAYER中,安全沙箱是一个关键的安全性组件,它将资源逻辑地分组,以限制各个FLASH应用程序能够执行的操作和访问的资源。安全沙箱确保了各应用程序与...

    Flex 安全沙箱问题 简单处理方法

    Flex安全沙箱问题是一个在开发基于Adobe Flex的应用程序时经常遇到的问题。Flex作为一个富互联网应用程序(RIA)框架,它使用ActionScript和MXML进行编程,而这些代码在运行时受到安全沙箱的限制,以防止恶意行为。...

    lex for arcgis java tomcat环境不能跨域问题 (安全沙箱问题2048

    在本案例中,标题和描述提到的是"lex for arcgis"在Java Tomcat环境下遇到的跨域限制,这个问题通常被称为"安全沙箱问题2048"。下面我们将深入探讨这个话题。 首先,让我们明确什么是跨域问题。在Web浏览器的安全...

    Flash Socket策略mini服务器,迅速解决Flash socket安全策略问题,安全沙箱问题

    本程序为绿色mini服务程序 程序会自动打开Flash默认的843端口 自动将crossdomain.xml返回给flash客户端 您可以修改crossdomain.xml中的内容,大小不要超过10K

    ActionScript 3.0安全沙箱及相关问题资料

    《安全沙箱问题解决》文档可能汇总了一些常见安全沙箱问题及其解决方法,这对于开发者在实践中遇到沙箱限制时具有指导意义。 综上所述,这个压缩包包含的资料详细讲解了ActionScript 3.0的安全沙箱机制、跨域通信...

    flash 安全沙箱处理集合

    遇到安全沙箱问题时,首先需要确定代码运行的环境(本地还是网络)和所需的权限。然后,检查代码中是否有不恰当的资源访问尝试。如果需要跨沙箱操作,确保已正确设置安全策略。 7. **调试技巧** 使用Flash Player...

    flash安全沙箱汇总

    在IT行业中,安全沙箱是一种重要的安全机制,尤其在Flash技术中扮演着核心角色。Flash安全沙箱的主要目的是为了限制并隔离运行的Flash内容,防止它们对用户系统造成潜在的危害。下面将详细介绍Flash安全沙箱的基本...

    flex 安全沙箱问题备忘

    在开发中遇到的安全沙箱问题主要是由于Flash Player的沙箱安全策略导致的。当运行在Flex环境下的Flash应用程序尝试访问不同域(如***尝试访问***的资源)时,出于安全考虑,Flash Player默认禁止这种跨域行为。这是...

    AS与java socket通讯解决安全沙箱

    为了解决安全沙箱问题,我们需要采取以下步骤: 1. **设置安全策略文件**:在服务器端,你需要创建一个XML格式的安全策略文件(crossdomain.xml),声明允许哪些来源的AS客户端进行Socket连接。这个文件需要放在...

    FLEX安全沙箱实用指南

    ### FLEX安全沙箱实用指南 #### 一、引言 在进行FLEX开发时,了解和掌握FLEX的安全沙箱机制对于确保应用程序的安全性至关重要。本文将详细介绍FLEX安全沙箱的相关概念及其应用场景,帮助开发者更好地理解如何在...

    AS3.0安全沙箱 843策略文件

    这是个通用类,里面包含了处理843端口的安全沙箱问题以及socket基本的向服务器send资源问题。 请求方式是,先发整形,然后发id长度,再发id(String) 得到的资源是先得到字符长度,再得到字符串。这个是和后退约定的...

    as3 安全沙箱 处理办法

    在AS3中,安全沙箱是一个关键概念,它是为了保护用户系统免受恶意代码侵害而设计的安全机制。安全沙箱主要有三种类型:本地沙箱、网络沙箱和本地_with_networking沙箱。 1. **本地沙箱**:当Flash内容从用户的本地...

    全面认识Flex安全沙箱

    Flex安全沙箱是Adobe Flex应用程序在运行时遵循的一套安全机制,旨在保护用户的数据和系统安全。这个概念是在Flex 4之后尤其受到关注,因为当时在Internet Explorer中出现了与安全沙箱相关的挑战。沙箱模型类似于...

    flex 安全沙箱 策略问题 demo

    在Adobe Flash Player升级到9.0.124后,由于安全策略更改,原来Socket或XmlSocket的应用里的http方式加载安全策略的手段不能继续使用。更改如下: 1,首先检测目标服务器的843端口是否提供安全策略 2,如果1没有检测...

    安全沙箱容器在边缘计算场景的实践.pdf

    1.安全沙箱容器 2.EdgeKubernetes 3.安全沙箱容器@edge方案 4.新探索 随着云计算边界不断向边缘侧延展,5G 和物联网技术的蓬勃发展给边缘计算带来了巨大机遇的同时,也带来了极大的挑战,传统 runc 容器已无法满足...

Global site tag (gtag.js) - Google Analytics