安全沙箱(三):发布者许可(策略文件)&创建者许可(allowDomain)

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

 

创建政策文件:


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 ;位置:网站的根目录
  • 如果政策文件在网站根目录 中,它授权对整个网站的访问权 。
  • 如果政策文件在网站的一个子目录 中,它授权对该目录及子目录的访问权 ,此时需要手工装载这个政策文件 :
  1. Security.loadPolicyFile("http://domainOrIP/pathToPolicyFile" );  
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 >   
  1. var urlloader:URLLoader = new  URLLoader();  
  2. urlloader.load(new  URLRequest("http://site-a.com/assets/file.xml" ));  
var urlloader:URLLoader = new URLLoader();
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 >   
  1. var loaderContext = new  LoaderContext();  
  2. loaderContext.checkPolicyFile = true
  3. theLoader.load(new  URLRequest("http://site-a.com/assets/image.jpg" , loaderContext));  
  4. trace(theLoader.content);  
var loaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;

theLoader.load(new URLRequest("http://site-a.com/assets/image.jpg", loaderContext));
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 >   
  1. var socket:Socket = new  Socket();  
  2. try
  3. {  
  4.     socket.connect("site-a.com"3000 );  
  5. }
  6. catch  (e:SecurityError)
  7. {  
  8.     trace("Connection problem" );  
  9.     trace(e.message);  
  10. }  
var socket:Socket = new Socket();
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. 当一个政策文件在和所需的套接字连接的不同端口 提供服务时,必须手工装载那个政策文件 ,添加以下语句:

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

基于HTTP的政策文件:

必须满足的条件:

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

 

创建者许可(allowDomian()):

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

导入装载:swf装载swf

 

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

  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);  
var loaderContext:URLLoader = new URLLoader();
// 仅当加载AS3编写的SWF文件时才会使用此属性
loaderContext.applicationDomain = ApplicationDomain.currentDomain;
loaderContext.securityDomain = SecurityDomain.currentDomain;
loader.load(new URLRequest("http://site-a.com/assets/file.swf"), loaderContext);

处理安全违规:

 

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

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

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

  1. var loader:Loader = new  Loader();  
  2. loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorListener); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值