`

“SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface 调用者xxx不能访问xxx”解决方案一例

    博客分类:
  • Flex
阅读更多

在家上网赚钱更容易

今天,我把我的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" />

  2. 在 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安全沙箱的相关概念及其应用场景,帮助开发者更好地理解如何在...

    沙箱安全系统解决方案设计-研华.pdf

    沙箱安全系统是一种先进的网络安全解决方案,旨在检测和防御高级持续性威胁(APT)和其他未知的恶意软件。在研华科技的解决方案中,他们采用了Fortinet的APT防御技术,特别是FortiSandbox,来应对日益复杂的网络威胁...

    Flex_RPC错误大全

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

    ExternalInterface

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

    Java Security

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

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

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

    flash安全沙箱汇总

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

    Firehunter APT沙箱安全技术方案.pptx

    .Firehunter APT沙箱安全技术解决方案是华为提供的一种APT沙箱安全解决方案,旨在检测和防御APT攻击。该解决方案基于行为特征检测和机器学习技术,能够检测未知恶意文件和未知威胁,并提供高效的检测和防御能力。 ...

    flash 安全沙箱处理集合

    在处理跨沙箱操作时,可能会遇到安全错误,如`Error #2048`(SecurityError),这通常意味着尝试访问受限制的资源。解决这些问题通常需要理解安全模型并调整代码,例如使用安全URL或引导用户授予许可。 4. **安全...

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

    Edge Kubernetes 是一种边缘计算场景下的解决方案,可以提供安全沙箱容器和 Kubernetes 集群管理。 安全沙箱容器 @edge 方案可以提供以下特点: 1. 云边端相互协同,提供统一的交付、运维、管控标准。 2. 云端统一...

    全面认识Flex安全沙箱

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

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

    Flex安全沙箱问题是一个在开发基于...总的来说,解决Flex安全沙箱问题需要深入理解沙箱机制、跨域策略和`crossdomain.xml`文件的配置,同时关注服务器端的实现细节,以确保应用程序既能正常运行,又能保障用户的安全。

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

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

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

    但是根据文档的标题和描述,我们可以推断出该文档主要讲述了如何构建一个以密钥沙箱(Key sandbox)为核心的安全应用环境。因此,接下来的内容将会围绕密钥沙箱的安全机制、应用环境构建以及可能涉及到的相关技术...

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

    在IT行业中,安全沙箱是一种重要的安全机制,用于限制应用程序的权限,防止它们对系统造成潜在的危害。在 Flash 技术中,安全沙箱的概念尤为关键,因为它允许 Flash 内容在网页上运行,同时限制了其对用户计算机的...

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

    类文件校验器是Java沙箱安全机制中的另一个重要组件,它的作用是对加载到JVM中的类文件进行校验,确保它们符合Java语言规范,且不会导致系统不稳定或出现安全漏洞。具体而言,类文件校验器的工作分为四步: 1. **...

    as3 安全沙箱 处理办法

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

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

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

Global site tag (gtag.js) - Google Analytics