`
ch_kexin
  • 浏览: 898929 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

“SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface 调用者xxx不能访问xxx”【二】

 
阅读更多
今天,我把我的Flash Player插件做了一下升级,变为了10.0.42.34的版本。然后发现之前能够在本地正常运行的DVF,今天运行起来却抛出了异常信息。提示信息如下:

SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface 调用者 file://D:\study\flex\service\bin\rainbowX.swf 不能访问 file://D:\study\flex\service\bin\rainbowX_Debug.html。
at flash.external::ExternalInterface$/_initJS()
at flash.external::ExternalInterface$/addCallback()
at freeidea.rainbowX::Application()


       根据调试信息的提示是因为调用了ExternalInterface.addCallback方法导致的。于是看了一下帮助文档,文档中关于此方法抛出安全性异常的描述如下:


引发

  Error— 此容器不支持传入调用。 仅在适用于 Windows 的 Internet Explorer 和使用 NPRuntime API 的浏览器(如 Mozilla 1.7.5 及更高版本或 Firefox 1.0 及更高版本)中支持传入调用。
 
  SecurityError— 您无权访问的沙箱中的 ActionScript 已经添加了具有指定名称的回调;您不能覆盖该回调。 若要解决此问题,请改写原来调用 addCallback() 方法的 ActionScript,以使其还调用 Security.allowDomain() 方法。
 
  SecurityError— 包含环境属于调用代码无权访问的安全沙箱。 若要解决此问题,请按照下列步骤操作:
    1. 在包含 SWF 文件的 HTML 页中,在该文件的 object 标签中设置以下参数:

      <param name="" value="always" />


    1. 在 SWF 文件中,添加以下 ActionScript:

      flash.system.Security.allowDomain(sourceDomain )


      看了上面的帮助说明,我觉得有可能是因为跨域访问的问题,因为在“作者(开发人员)控制”一文中也有提到过如果SWF要跟HTML的脚本进行通信必须要把插件的allowScriptAccess的值设置为always。以及SWF要允许该域的访问。于是我试着在SWF中加入了flash.system.Security.allowDomain("*");然后在加载他的HTML中加入了<param name="allowScriptAccess" value="always" />这一句。


   但是问题还是得不到解决。没办法只能往别的方向思考。后来发现我的DVF在Project的输出文件夹中能够正常浏览(我是用Flex建立的),一旦移到别的目录下面就不行了呢?结果找了一下资料看到了下面一篇文章,文章名称叫“权限控制概述”。这篇文章主要说明了Flash Player的安全模型是怎么样的。下面我把部分内容贴上来,有兴趣的朋友可以到网上搜索一下。


权限控制概述


Flash Player 客户端运行时安全模型是围绕 SWF 文件、本地数据和 Internet URL 等这些对象资源设计而成的模型。“资源持有者”是指拥有或使用这些资源的各方。资源持有者可以对其自己的资源进行控制(安全设置),每种资源有四个持有者。Flash Player 对这些控制严格采用一种权利层次结构,如下图所示:






安全控制层次结构


 


该图说明,如果管理员限制对资源的访问,则任何其他持有者都不能覆盖该限制。


管理用户控制


计算机的管理用户(使用管理权限登录的用户)可以应用能影响计算机所有用户的 Flash Player 安全设置。在非企业环境(例如家庭计算机)中,通常只有一个用户,该用户也拥有管理访问权限。即使是在企业环境中,单个用户也可以拥有计算机管理权限。


管理用户控制有两种类型:



    • mms.cfg 文件

    • “全局 Flash Player 信任”目录


mms.cfg 文件


在 Mac OS X 系统上,mms.cfg 文件位于 /Library/Application Support/Macromedia 中。在 Microsoft Windows 系统上,该文件位于系统目录的 Macromedia Flash Player 文件夹中(例如,在 Windows XP 默认安装中为 C:\windows\system32\macromed\flash\mms.cfg)。


Flash Player 启动时将从此文件中读取其安全设置,然后使用这些设置限制功能。


mms.cfg 文件包括管理员用于执行以下任务的设置:



    • 数据加载 — 限制读取本地 SWF 文件、禁止文件下载和上载以及对永久共享对象设置存储限制。

    • 隐私控制 — 禁止麦克风和摄像头访问、禁止 SWF 文件播放无窗口内容,以及禁止与浏览器窗口中显示的 URL 不匹配的域中的 SWF 文件访问永久共享对象。

    • Flash Player 更新 — 设置检查 Flash Player 更新版本的时间间隔、指定检查 Flash Player 更新信息所使用的 URL、指定从其中下载 Flash Player 更新版本的 URL 以及完全禁用 Flash Player 的自动更新。

    • 旧版文件支持 — 指定是否应将早期版本的 SWF 文件放置在受信任的本地沙箱中。

    • 本地文件安全性 — 指定是否可以将本地文件放置在受信任的本地沙箱中。

    • 全屏模式 — 禁用全屏模式。


SWF 文件可通过调用 Capabilities.avHardwareDisableCapabilities.localFileReadDisable 属性来访问已禁用功能的某些信息。但是,mms.cfg 文件中的大部分设置无法通过 ActionScript 进行查询。


为对计算机强制执行与应用程序无关的安全和隐私策略,只能由系统管理员修改 mms.cfg 文件。mms.cfg 文件不能用于安装应用程序。虽然使用管理权限运行的安装程序可以修改 mms.cfg 文件的内容,但是 Adobe 将此类使用视为违反用户的信任,并且劝告安装程序的创建者决不要修改 mms.cfg 文件。


“全局 Flash Player 信任”目录


管理用户和安装应用程序可以将指定的本地 SWF 文件注册为受信任。这些 SWF 文件会被分配到受信任的本地沙箱。它们可以与任何其它 SWF 文件进行交互,也可以从任意位置(远程或本地)加载数据。文件在“全局 Flash Player 信任”目录中被指定为受信任,该目录与 mms.cfg 文件的所在目录相同,位置(特定于当前用户)如下:



    • Windows:system\Macromed\Flash\FlashPlayerTrust

      (例如,C:\windows\system32\Macromed\Flash\FlashPlayerTrust)


    • Mac:app support/Macromedia/FlashPlayerTrust

      (例如,/Library/Application Support/Macromedia/FlashPlayerTrust)



“Flash Player 信任”目录可以包含任意数目的文本文件,每个文件均列出受信任的路径,一个路径占一行。每个路径可以是单个的 SWF 文件、HTML 文件,也可以是目录。注释行以 # 号开头。例如,包含以下文本的 Flash Player 信任配置文件表示将向指定目录及所有子目录中的所有文件授予受信任状态:



# Trust files in the following directories:

C:\Documents and Settings\All Users\Documents\SampleApp


信任配置文件中列出的路径应始终是本地路径或 SMB 网络路径。信任配置文件中的任何 HTTP 路径均会被忽略;只能信任本地文件。


为避免发生冲突,应为每个信任配置文件指定一个与安装应用程序相应的文件名,并且使用 .cfg 文件扩展名。


由于开发人员通过安装应用程序分发本地运行的 SWF 文件,因此可以让安装应用程序向“全局 Flash Player 信任”目录添加一个配置文件,为要分发的文件授予完全访问权限。安装应用程序必须由拥有管理权限的用户来运行。与 mms.cfg 文件不同,包含“全局 Flash Player 信任”目录是为了让安装应用程序授予信任权限。管理用户和安装应用程序都可以使用“全局 Flash Player 信任”目录指定受信任的本地应用程序。


    看完这篇文章后,终于发现原来Flex中的项目其实也是把项目中的输出文件加入了本地信任沙箱。而且在本地的指定目录下也找到了关于Flex的cfg文件,里面确实是加入了各个项目的输出文件夹。于是我也试着把DVF所处的目录加入本地信任沙箱。根据文中中所说的cfg文件格式把整个文件夹的路径字符串写入了文本文件中,然后另存为cfg文件。把它放到system\Macromed\Flash\FlashPlayerTrust中。然后再次运行DVF,报错信息没有了,问题得到了解决。


    回想了一下,发觉Flash Player对安全性方面确实是越来越严格了。现在的版本甚至对本地运行也要求如此严格(我之前用的版本是9.0的,只要做到在HTML中设置allowScriptAccess为always即可)。只有透彻地了解Flash Player的安全机制才能更好地帮助我们解决问题。不过我上面采用的是管理用户控制的方法实现的,所以是属于最高配置级别了,对安全方面可能存在相对较大的隐患,大家也可以尝试用普通用户控制的方法加入受信任。文章就写到这里,希望对大家有所帮助。

分享到:
评论

相关推荐

    在Flex中发布地图 程序报错 SecurityError: Error #2048: 安全沙箱冲突,只需要下载添加这个就可以

    网上的方法很多,我看了好多,但是就是不管用,我的情况是,在程序没发布时,直接运行没错误,但是当发布时,访问就错了,提示SecurityError: Error #2048: 安全沙箱冲突:http://localhost:8086/index.swf 不能从 ...

    FLEX安全沙箱实用指南

    #### 二、FLEX安全沙箱概述 FLEX安全沙箱是一种用于控制和限制不同来源的FLEX应用程序之间的交互的安全机制。它主要通过定义一系列的安全策略来实现对不同域之间资源访问权限的管理。FLEX安全沙箱主要包括以下几个...

    Java Security

    在Java中,安全性通过一系列的机制来实现,包括沙箱模型、安全管理者、访问控制器等。 ### 书籍概述 - **版本**:本书使用的Java版本及相关工具。 - **约定**:书中使用的特殊符号或格式。 - **组织结构**:章节...

    Flex_RPC错误大全

    错误信息:“ReferenceError:Error#1056:无法为创建属性:当使用 [RemoteClass(alias="XXX")],客户端与服务器端ValueObject映射时属性名不一致。” - **问题分析**:当客户端和服务器端的ValueObject属性命名不...

    ExternalInterface

    在不支持的环境中尝试使用`addCallback`可能会触发`SecurityError`异常。 #### call方法:从ActionScript调用外部函数 与`addCallback`相反,`call`方法使得ActionScript能够调用外部环境(通常是JavaScript)中的...

    flash安全沙箱汇总

    例如,网络沙箱中的代码不能直接读取或写入本地文件,而本地沙箱中的代码则可以在获得用户许可后进行此类操作。此外,沙箱还控制了代码可以访问的网络资源,防止跨站脚本攻击(XSS)和其他恶意活动。 三、Flash安全...

    很好用的js拷贝网页超链接

    如果想把自己网页中的超链接进行复制,然后转发给别人,只要您点点鼠标即可(^_^)!...注:如果你在本地运行,会报“SecurityError: Error #2060: 安全沙箱冲突:ExternalInterfac...”错误,放到你的web项目里则不会了.

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

    在AS3中,Socket通信受到沙箱限制,例如,本地内容不能直接连接到非同一域的服务器。为了解决这个问题,可以采用以下策略: 1. 交叉域策略文件(cross-domain policy file):服务器端需要提供一个XML文件,允许...

    全面认识Flex安全沙箱

    a) **受限本地沙箱**:这种沙箱中的SWF文件只能与本地文件系统交互,不能访问网络。这样可以防止恶意软件利用Flash内容进行网络活动。 b) **受信任的本地沙箱**:当SWF文件位于特定的信任目录(例如,...

    构建以密钥沙箱为核心的安全应用环境.pdf

    在数据加密、数字签名、安全支付、用户身份验证和保护个人隐私等场景中,密钥沙箱都发挥着不可替代的作用。 ### 构建密钥沙箱环境的步骤和考虑因素 1. **隔离环境**:创建应用程序或服务的运行环境,确保其只能访问...

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

    沙箱机制是为了保护用户的系统安全,防止不受信任的代码对本地文件系统或网络资源进行未经授权的访问。 首先,我们要理解Flex中的两个主要沙箱:本地沙箱和网络沙箱。本地沙箱允许应用程序访问用户计算机上的文件...

    基于沙箱的Java安全体系结构

    ### 基于沙箱的Java安全体系结构 #### 概述 Java作为一种跨平台的编程语言,其安全模型的设计尤为关键。Java的安全沙箱机制是确保Java应用程序能够在不损害系统安全的前提下运行的重要保障。本文将详细介绍Java...

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

    ACK 安全沙箱容器可以提供多用户负载隔离、私密加密运行环境和不可信应用隔离等特点。ACK 边缘容器 Infrastructure Edge 可以提供云边端相互协同、统一管控、节点自治和设备就近接入等特点。 安全沙箱容器在边缘...

    flash 安全沙箱处理集合

    - `Local with Network`沙箱允许本地内容访问网络,但不能访问本地文件系统。 - `Local without Network`沙箱不允许网络访问,只能运行本地内容。 - `Remote`沙箱用于远程内容,可以访问网络,但需要用户许可才能...

    毕业设计-Springboot + Vue.js 的校园二手交易商城毕设,包括阿里SMS短信验证,支付宝沙箱支付

    毕业设计-Springboot + Vue.js 的校园二手交易商城毕设,包括阿里SMS短信验证,支付宝沙箱支付。 基于Springboot和Vue.js的校园二手交易商城是一个结合了前后端分离和电子商务技术的项目。使用阿里SMS短信验证和...

    as3 安全沙箱 处理办法

    1. **本地沙箱**:当Flash内容从用户的本地硬盘加载时,它们运行在本地沙箱中,不能访问网络资源,但可以访问本地文件系统和硬件。 2. **网络沙箱**:如果内容从网络上加载,如通过HTTP或FTP,它们将运行在网络沙箱...

    flex 沙箱安全问题

    **Error #2048**:此错误代码通常表示Flash Player或Flex应用程序尝试访问的数据源不受当前沙箱的安全策略所允许。当一个Flex应用程序试图通过网络连接到另一个域时,如果该域未正确配置跨域资源共享政策,则会触发...

    支付宝沙箱接口调用

    请注意,沙箱环境下的秘钥与生产环境是不同的,不能混淆使用。 在调用沙箱接口时,需要使用沙箱版的API地址,而非正式环境的。例如,支付接口的调用URL会有所不同,通常会在正式URL前加上“sandboxnew”标识。同时...

Global site tag (gtag.js) - Google Analytics