计算机安全沙箱,安全沙箱

术语:

资源发布者 (Resource Distributor ):

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

26773828_1.jpg

资源创建者 (Resource Creator ):

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

26773828_2.jpg

用户 (User):

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

安全沙箱类型:

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

remote:来自远程范围的所有.swf

local-with-filesystem

local-with-networking

local-trusted

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

本地内容

内容作为数据访问

交叉脚本控制

装载数据

连接一个套接字

发送数据到一个外部的URL

访问用户的相机和麦克风

访问本地共享的对象

上传或下载由用户选择的文件

通过一个.swf文件脚本控制一个HTML页面,反之亦然

连接一个LocalConnection频道

限制范围:

内容装载 :可以使用 Loader 、Sound和 NetStream等这样一些类来加载内容

26773828_3.jpg

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

法从加载的媒体内容中提取数据

26773828_4.jpg

交叉脚本控制 :

26773828_5.jpg

数据装载 :可以从使用 URLStream 、URLLoader 、Socket和 XMLSocket等类加载的外部文件 (如 XML文件)中直

接访问数据

26773828_6.jpg

限定策略:

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

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

remote安全沙箱

26773828_7.jpg

local-with-filesystem 安全沙箱

26773828_8.jpg

local-with-networking 安全沙箱

26773828_9.jpg

local-trusted 安全沙箱

26773828_10.jpg

套接字安全:

本地沙箱 :

26773828_11.jpg

远程沙箱 :

26773828_12.jpg

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

26773828_13.jpg

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

mms.cfg 文件:C:\WINDOWS\system32\Macromed\Flash\mms.cfg

“ 全局 Flash Player 信任 ” 目录:C:\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust

2. 用户控制:

设置 UI :右键Flash Player

设置管理器 :右键Flash Player -> 高级

“ 用户 Flash Player 信任

” 目录:在 Windows XP 上:C:\Documents and Settings\JohnD\Application

Data\Macromedia\Flash Player\#Security\FlashPlayerTrust,在 Windows Vista

上: C:\Users\JohnD\AppData\Roaming\Macromedia\Flash

Player\#Security\FlashPlayerTrust

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 Data\Macromedia\Flash Player\#Security\FlashPlayerTrust “

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

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

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

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

26773828_14.jpg

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

Access local files only:local-with-filesystem

Access network only:local-with-networkin

26773828_15.jpg

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

Java代码 26773828_16.gif

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

授予本地信任:

1. 打开在线 的 Flash Player Settings Manager

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

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

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

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

创建政策文件:

Xml代码 26773828_16.gif

cross-domain-policy

SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

"*"符号表示给所有源头 授权。

为了包含本地范围 作为一个授权源头,一个政策文件必须通过为domain属性指定 * 来显式地信任所有的源头。

domain指定的IP 和他们等价域名 是不同的 。

公布政策文件:

默认的 名字和位置:名字:crossdomain.xml ;位置:网站的根目录

如果政策文件在网站根目录 中,它授权对整个网站的访问权 。

如果政策文件在网站的一个子目录 中,它授权对该目录及子目录的访问权 ,此时需要手工装载这个政策文件 :

Java代码 26773828_16.gif

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

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

Xml代码 26773828_16.gif

cross-domain-policy

SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

Java代码 26773828_16.gif

var urlloader:URLLoader =newURLLoader();

urlloader.load(newURLRequest("http://site-a.com/assets/file.xml"));

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

Xml代码 26773828_16.gif

cross-domain-policy

SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

Java代码 26773828_16.gif

var loaderContext =newLoaderContext();

loaderContext.checkPolicyFile =true;

theLoader.load(newURLRequest("http://site-a.com/assets/image.jpg", loaderContext));

trace(theLoader.content);

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

Xml代码 26773828_16.gif

cross-domain-policy

SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

Java代码 26773828_16.gif

var socket:Socket =newSocket();

try{

socket.connect("site-a.com",3000);

}catch(e:SecurityError) {

trace("Connection problem");

trace(e.message);

}

1. 端口范围 :

to-ports="9100, 9200"

to-ports="10000-11000"

to-ports="*"

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

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

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

Java代码 26773828_16.gif

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

基于HTTP的政策文件:

必须满足的条件:

它必须被命名为crossdomain.xml

它必须放置于网页服务器的根目录 中

它必须在所需要的套接字连接的域名 或IP地址的端口80 上提供服务

在AS3中,它必须通过Security.loadPolicyFile()来手工装载

创建者许可(allowDomian()):

Java代码 26773828_16.gif

Security.allowDomain("www.sometvnetwork.com","sometvnetwork.com");

Security.allowDomain("*");

只作用于交叉脚本控制 和HTML-to-SWF脚本控制 操作

*符号不能 用作一个子域名 的通配符 :Security.allowDomain("*.example.com ");不行的

一个.swf文件可以通过检查被装载的.swf文件的LoaderInfo 对象中的childAllowsParent 变量来判定它是否被授权

导入装载:swf装载swf

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

Java代码 26773828_16.gif

var loaderContext:URLLoader =newURLLoader();

// 仅当加载AS3编写的SWF文件时才会使用此属性

loaderContext.applicationDomain = ApplicationDomain.currentDomain;

loaderContext.securityDomain = SecurityDomain.currentDomain;

loader.load(newURLRequest("http://site-a.com/assets/file.swf"), loaderContext);

处理安全违规:

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

Java代码 26773828_16.gif

var urlloader:URLLoader =newURLLoader();

urlloader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorListener);

urlloader.load(".../index.xml");

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

Java代码 26773828_16.gif

var loader:Loader =newLoader();

loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorListener);

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

关键字: 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 页 中的 和 标签中设置 allowNetworking 参数来控制 SWF 文件访问网络的功能。

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

"all " (默认值) — 在 SWF 中允许所有的网络 API。

"internal "— SWF 文件可能不调用浏览器导航或浏览器交互 API ,但是它会调用任何其它网络API。

"none "— SWF 文件可能不调用浏览器导航或浏览器交互 API ,并且它无法使用任何 SWF 到SWF 通信 API 。

Xml代码 26773828_16.gif

Codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0"

width="600"height="400"ID="test"align="middle">

width="600"height="400"

name="test"align="middle"type="application/x-shockwave-flash"

pluginspage="http://www.macromedia.com/go/getflashplayer"/>

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

Java代码 26773828_16.gif

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

全屏模式安全性:

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

Xml代码 26773828_16.gif

codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,18,0"

width="600"height="400"id="test"align="middle">

width="600"height="400"

name="test"align="middle"type="application/x-shockwave-flash"

pluginspage="http://www.macromedia.com/go/getflashplayer"/>

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

Java代码 26773828_16.gif

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

设置LocalConnection权限:

同一域中没问题 。

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

Java代码 26773828_16.gif

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代码 26773828_16.gif

codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0'height='100%'

width='100%'>

height='100%'width='100%'AllowScriptAccess='never'/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值