加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex安全沙箱

发布时间:2020-12-15 04:51:02 所属栏目:百科 来源:网络整理
导读:安全沙箱 ? 术语: 资源发布者 (Resource Distributor ): 提供一个给定资源的一方。通常是一个 服务器操作者 ,诸如一个网站管理员或套接字 服务器管理员 。 ? 资源创建者 (Resource Creator ): 真正创建资源的一方。对于.swf文件,资源创建者是编译.s

安全沙箱

?

术语:

资源发布者 (Resource Distributor ):

提供一个给定资源的一方。通常是一个服务器操作者 ,诸如一个网站管理员或套接字服务器管理员

?

资源创建者 (Resource Creator ):

真正创建资源的一方。对于.swf文件,资源创建者是编译.swf的ActionScript开发人员

?

用户 (User):

Flash Player运行的计算机的用户。

?

安全沙箱类型:

可通过 flash.system.Security.sandboxType 获取其值

  • remote:来自远程范围的所有.swf
  • local-with-filesystem
  • local-with-networking
  • local-trusted

安全沙箱类型可能禁止的外部操作类型:

  • 本地内容
  • 内容作为数据访问
  • 交叉脚本控制
  • 装载数据
  • 连接一个套接字
  • 发送数据到一个外部的URL
  • 访问用户的相机和麦克风
  • 访问本地共享的对象
  • 上传或下载由用户选择的文件
  • 通过一个.swf文件脚本控制一个HTML页面,反之亦然
  • 连接一个LocalConnection频道

限制范围:

内容装载 :可以使用 LoaderSound NetStream 等这样一些类来加载内容

?

内容作为数据访问 :(读取一个内容资源的内部信息,例如,读取一张位图的像素 或者一段音频 )可以通过使用 Bitmap 对象、BitmapData.draw() 方法、Sound.id3 属性或者 SoundMixer.computeSpectrum()
法从加载的媒体内容中提取数据

?

交叉脚本控制

?

数据装载 :可以从使用 URLStreamURLLoaderSocket XMLSocket 等类加载的外部文件 (如 XML 文件)中直
接访问数据

?

限定策略:

?

创建者允许 :一个.swf文件含有对恰当的Security 类的静态方法allowDomain ()的调用。

所有者允许 :意味着发布者使得恰当的跨域名政策文件可用

?

remote 安全沙箱


?

local-with-filesystem 安全沙箱


?

local-with-networking 安全沙箱


?

local-trusted 安全沙箱


?

套接字安全:

本地沙箱


?

远程沙箱


?

全沙箱(二):权限控制 & 如何选择设置一个本地(local)安全沙箱类型关键字: flash player,sand box

权限控制:

1. 管理员控制: 计算机的管理用户(使用管理权限登录的用户 )可以应用能影响计算机所有用户的 Flash Player 安全设置

  • mms.cfg 文件:C:WINDOWSsystem32MacromedFlashmms.cfg
  • 全局 Flash Player 信任 ” 目录:C:WINDOWSsystem32MacromedFlashFlashPlayerTrust

2. 用户控制

  • 设置 UI :右键Flash Player
  • 设置管理器 :右键Flash Player -> 高级
  • 用户 Flash Player 信任 ” 目录:在 Windows XP 上:C:Documents and SettingsJohnDApplication DataMacromediaFlash Player#SecurityFlashPlayerTrust,在 Windows Vista 上: C:UsersJohnDAppDataRoamingMacromediaFlash Player#SecurityFlashPlayerTrust

3. 网站控制: (策略文件)详见 安全沙箱(三)

?

4. 作者(开发人员)控制: Security.allowDomain("www.example.com"),详见 安全沙箱(三)

?

三种设置 local-with-filesystem 或 local-with-networking 的方法:

?

使用Flex Builder和Flash authoring tool所编译的swf均是local-trusted ,配置文件目录见下:

C:Documents and Settings[USER]Application DataMacromediaFlash Player#SecurityFlashPlayerTrust

?

1. 使用Flex Builder:默认-use-network=false(如果文件不在非信任位置)

在Additional编译器参量下,输入:-use-network=false

-use-network=false:local-with-filesystem

-use-network=true:local-with-networking


?

2. 使用Flash authoring tool:默认Access local files only(如果文件不在非信任位置)

Access local files only:local-with-filesystem

Access network only:local-with-networkin


?

3. 使用Flex SDK 命令行编译器

Java代码

  1. mxmlc.exe?-use-network=false?-file-specs?c:...Calendar.as?-output?c:...Calendar.swf??

?

授予本地信任:

?

1. 打开在线 Flash Player Settings Manager

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html

?

2. 在 Global Security Settings 中添加你希望信任的位置

?

3. 关闭所有的 Flash Player 实例重新启动非常重要,所有的

?

=================================

发布者许可(政策文件):

?

创建政策文件:

Xml代码

  1. <?xml?version="1.0"?>??
  2. <!DOCTYPE?cross-domain-policy ??
  3. ??SYSTEM?"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">??
  4. <cross-domain-policy>??
  5. ??<allow-access-from?domain="domainOrIP"?/>??
  6. ??<allow-access-from?domain="*.example.com"?/>??
  7. ??<allow-access-from?domain="*"?/>??
  8. ??<allow-access-from?domain="localhost"?/>??
  9. </cross-domain-policy>??
  • "*"符号表示给所有源头 授权。
  • 为了包含本地范围 作为一个授权源头,一个政策文件必须通过为domain属性指定 * 来显式地信任所有的源头。
  • domain指定的IP 和他们等价域名不同的


公布政策文件:

  • 默认的 名字和位置:名字:crossdomain.xml ;位置:网站的根目录
  • 如果政策文件在网站根目录 中,它授权对整个网站的访问权
  • 如果政策文件在网站的一个子目录 中,它授权对该目录及子目录的访问权 ,此时需要手工装载这个政策文件
Java代码

  1. Security.loadPolicyFile("http://domainOrIP/pathToPolicyFile");??
?

取得一个政策文件的许可来装载数据

Xml代码

  1. <?xml?version="1.0"?>??
  2. <!DOCTYPE?cross-domain-policy ??
  3. ??SYSTEM?"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">??
  4. <cross-domain-policy>??
  5. ??<allow-access-from?domain="www.site-b.com"?/>??
  6. ??<allow-access-from?domain="site-b.com"?/>??
  7. </cross-domain-policy>??
Java代码

  1. var?urlloader:URLLoader?=?new?URLLoader(); ??
  2. urlloader.load(new?URLRequest("http://site-a.com/assets/file.xml"));??

?

取得一个政策文件的许可来把内容作为数据访问

Xml代码

  1. <?xml?version="1.0"?>??
  2. <!DOCTYPE?cross-domain-policy ??
  3. ??SYSTEM?"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">??
  4. <cross-domain-policy>??
  5. ??<allow-access-from?domain="www.site-b.com"?/>??
  6. ??<allow-access-from?domain="site-b.com"?/>??
  7. </cross-domain-policy>??
Java代码

  1. var?loaderContext?=?new?LoaderContext(); ??
  2. loaderContext.checkPolicyFile?=?true; ??
  3. ??
  4. theLoader.load(new?URLRequest("http://site-a.com/assets/image.jpg",?loaderContext)); ??
  5. trace(theLoader.content);??
?

使用一个政策文件来授权套接字连接

Xml代码

  1. <?xml?version="1.0"?>??
  2. <!DOCTYPE?cross-domain-policy ??
  3. ??SYSTEM?"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">??
  4. <cross-domain-policy>??
  5. ??<allow-access-from?domain="www.site-b.com"?to-ports="3000"?/>??
  6. ??<allow-access-from?domain="site-b.com"?to-ports="3000"?/>??
  7. </cross-domain-policy>??
Java代码

  1. var?socket:Socket?=?new?Socket(); ??
  2. try?{ ??
  3. ????socket.connect("site-a.com",?3000); ??
  4. }?catch?(e:SecurityError)?{ ??
  5. ????trace("Connection?problem"); ??
  6. ????trace(e.message); ??
  7. }??

?

1. 端口范围

to-ports="9100,9200"

to-ports="10000-11000"

to-ports="*"

?

2. 如果一个政策文件时取自小于1024 端口的一个套接字,* 表示对任何端口的访问都被授权

如果一个政策文件取自大于或者等于1024 端口的一个套接字,* 表示对于任何大于或者等于1024端口的访问都被授权

?

3. 当一个政策文件在和所需的套接字连接的不同端口 提供服务时,必须手工装载那个政策文件 ,添加以下语句:

Java代码

  1. Security.loadPolicyFile("xmlsocket://domainOrIP:portNumber");??
?

基于HTTP的政策文件:

必须满足的条件:

  • 它必须被命名为crossdomain.xml
  • 它必须放置于网页服务器的根目录
  • 它必须在所需要的套接字连接的域名IP地址的端口80 上提供服务
  • 在AS3中,它必须通过Security.loadPolicyFile()来手工装载

?

创建者许可(allowDomian()):

?

Java代码

  1. Security.allowDomain("www.sometvnetwork.com",?"sometvnetwork.com"); ??
  2. Security.allowDomain("*");??
  • 只作用于交叉脚本控制HTML-to-SWF脚本控制 操作
  • * 符号不能 用作一个子域名通配符 :Security.allowDomain("*.example.com ");不行的
  • 一个.swf文件可以通过检查被装载的.swf文件的LoaderInfo 对象中的childAllowsParent 变量来判定它是否被授权

导入装载:swf装载swf

?

如果两个swf来自不同的远程区域 ,或者不同的安全沙箱类型,使用下面的方法加载

Java代码

  1. var?loaderContext:URLLoader?=?new?URLLoader(); ??
  2. //?仅当加载AS3编写的SWF文件时才会使用此属性 ??
  3. loaderContext.applicationDomain?=?ApplicationDomain.currentDomain; ??
  4. loaderContext.securityDomain?=?SecurityDomain.currentDomain; ??
  5. loader.load(new?URLRequest("http://site-a.com/assets/file.swf"),?loaderContext);??

?

处理安全违规:

?

要么抛出一个SecurityError 异常,要么调度一个SecurityErrorEvent .SECURITY _ERROR

Java代码

  1. var?urlloader:URLLoader?=?new?URLLoader(); ??
  2. urlloader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,?securityErrorListener); ??
  3. urlloader.load(".../index.xml");??

?

有时需要注册LoaderInfo 的事件监听:

Java代码

  1. var?loader:Loader?=?new?Loader(); ??
  2. loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,?securityErrorListener);?

=======================

?

安全沙箱(四):Others

关键字: flash player,sand box

限制网络 API:

适用端口阻止 的 ActionScript 3.0 API:

FileReference.download()、FileReference.upload()、Loader.load()、Loader.loadBytes()、navigateToURL()、
NetConnection.call()、NetConnection.connect()、NetStream.play()、Security.loadPolicyFile()、sendToURL()、Sound.load()、URLLoader.load()、URLStream.load()

?

使用 allowNetworking 参数:

您可以通过在包含 SWF 内容的 HTML 页 中的 <object><embed> 标签中设置 allowNetworking 参数来控制 SWF 文件访问网络的功能。

allowNetworking 参数主要在 SWF 文件及所在的 HTML 页来自不同的域时使用。

  • "all " (默认值) — 在 SWF 中允许所有的网络 API。
  • "internal "— SWF 文件可能不调用浏览器导航或浏览器交互 API ,但是它会调用任何其它网络API。
  • "none "— SWF 文件可能不调用浏览器导航或浏览器交互 API ,并且它无法使用任何 SWF 到SWF 通信 API 。
Xml代码

  1. <object?classic="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"??
  2. Code?base="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,124,0"??
  3. width="600"?height="400"?ID="test"?align="middle">??
  4. <param?name="allowNetworking"?value="none"?/>??
  5. <param?name="movie"?value="test.swf"?/>??
  6. <param?name="bgcolor"?value="#333333"?/>??
  7. <embed?src="test.swf"?allowNetworking="none"?bgcolor="#333333"??
  8. width="600"?height="400"??
  9. name="test"?align="middle"?type="application/x-shockwave-flash"??
  10. pluginspage="http://www.macromedia.com/go/getflashplayer"?/>??
  11. </object>??

?

或者修改Flex Builder 生成的HTML,加入以下参数:

Java代码

  1. AC_FL_RunContent(?...?"allowNetworking",?"none",?...)??
?

全屏模式安全性:

要启用全屏模式,请在包含 SWF 文件引用的 HTML 页的 <object> 和 <embed> 标签中添加 allowFullScreen 参数,并将参数值设置为 "true" (默认值为 "false"),如下例所示:

Xml代码

  1. <object?classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"??
  2. codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,18,0"??
  3. width="600"?height="400"?id="test"?align="middle">??
  4. <param?name="allowFullScreen"?value="true"?/>??
  5. <param?name="movie"?value="test.swf"?/>??
  6. <param?name="bgcolor"?value="#333333"?/>??
  7. <embed?src="test.swf"?allowFullScreen="true"?bgcolor="#333333"??
  8. width="600"?height="400"??
  9. name="test"?align="middle"?type="application/x-shockwave-flash"??
  10. pluginspage="http://www.macromedia.com/go/getflashplayer"?/>??
  11. </object>??
?

或者修改Flex Builder 生成的HTML,加入以下参数:

Java代码

  1. AC_FL_RunContent(?...?"allowFullScreen",?"true",?...)??
?

设置LocalConnection权限:

同一域中没问题

对于不同沙箱 的SWF文件,需要设置:

Java代码

  1. LocalConnection.allowDomain()??
?

控制外出 URL 访问:

  • flash.system.fscommand() 函数
  • ExternalInterface.call() 方法
  • flash.net.navigateToURL() 函数

HTML 代码中用于加载 SWF 文件的 AllowScriptAccess 参数控制能否从 SWF 文件内执行外出 URL 访问

如果不设置 AllowScriptAccess 的值,则仅当 SWF 文件与 HTML 页来自同一个域才能通信

AllowScriptAccess 参数可以有 "always "、"sameDomain " 和 "never " 这三个可能值中的一个:

  • 当 AllowScriptAccess 为 "always" 时, SWF 文件可以与其嵌入到的 HTML 页进行通信,即使该 SWF 文件来自不同于HTML 页的域也可以。
  • 当 AllowScriptAccess 为 "sameDomain" 时,仅当 SWF 文件与其嵌入到的 HTML 页来自相同的域时,该 SWF 文件才能与该 HTML 页进行通信。此值是 AllowScriptAccess 的默认值。
  • 当 AllowScriptAccess 为 "never" 时,SWF 文件将无法与任何 HTML 页进行通信。
Xml代码

  1. <object?id='MyMovie.swf'?classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'??
  2. codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0'?height='100%'??
  3. width='100%'>??
  4. <param?name='AllowScriptAccess'?value='always'/>??
  5. <param?name='src'?value=''MyMovie.swf'/>??
  6. <embed?name='MyMovie.swf'?pluginspage='http://www.adobe.com/go/getflashplayer'?src='MyMovie.swf'??
  7. height='100%'?width='100%'?AllowScriptAccess='never'/>??
  8. </object>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读