简单总结 AS3 中的安全域

来源:互联网 发布:app上传图片到java 编辑:程序博客网 时间:2024/06/08 19:24

SandBox 译:沙盒、沙箱,大家都叫:沙箱;

可能外国人,喜欢比喻成:就像是一个沙池里,每个沙子就是该池的成员;同一个池子的沙子都是同一个安全域;

这时,你可以把这个沙子拟人化;池子比成一个国家;

一个池子的沙子,要与另一个池子里的沙子,联系、等等;

那么他们就要有:跨该境通行证(就是:护照,可理解成就是我们说的:沙箱安全认证);


Server A有个a.swf,域名为:www.aa.com,ip:192.168.1.2

Server B有个b.swf,域名为:www.bb.com,ip:192.168.1.3

如果启动入口程序是从a.swf的;

那么在a.swf中的代码如果直接加载完b.swf后,想访问b.swf内的模块->类的成员,等等的操作;

那么,就得在:b.swf中设置:将a.swf的安全域(域名、或是IP)设置为信任即可;反之,在a.swf中,设置b.swf的安全域(域名、或是IP)为信任;

代码:

Security.allowDomain("安全域(域名、或是IP)");

当然上面这种只是,针对.swf与.swf之间的安全域设置;


在网上阅读、复习了一些资源;

发现,只要是远程操作,都会与安全性的话题相关;


所以不单指是.swf与.swf之间会有安全问题;

.swf与远程的资源(非swf,如:.txt,.data,.rvm,.png;等等)


这时,这些资源不可以像上面的.swf与.swf的方式在代码里设置信任,这时是资源;(你怎么写代码?哈哈,对吧)

其实flash as3已有对应的解决方法,已写入了内置处理;


所以我们只要配置好安全域策略文件即可;

也就是大家常可以看到的文件:crossdomain.xml文件了;

cross 跨越

domain 域、领域

合译:跨域(跨越安全域)


如:

Server A的a.swf

Server B的b.png

如果在a中,有代码是加载b.png的行为,那么在B中没有crossdomain.xml的对应配置,a是无法加载的,会报异常:IOEvent之类,其实就是安全域问题(沙箱安全问题)

那么只要在Server B的网站根目录下,放个crossdomain.xml文件,再配置即可;


这样的配置格式:

<?xml version="1.0"?><cross-domain-policy><site-control permitted-cross-domain-policies="by-content-type"/><allow-access-from domain="*.example.com"/><allow-access-from domain="www.example1.com"/></cross-domain-policy>

<allow-access-from>这是信任节点,其中的属性:domain就是要指定的安全域;

domain可以使用通配符;

如果要设置多个域,就设置多个<allow-access-from>节点即可;

当然,也可以设置非信任域;这个大家就自己去找一下官方资料吧;

这样:一个域下的所有文件,就可以被信任域直接处理对应的安全操作。


还有一种情况需要特别处理;

就是对这些资源文件;

就算是网站:根目录下没有域策略配置文件;

客户端还是可以下载该文件的;但不可以操作;

如:在代码在使用:Loader类对象来加载,部份文件可以的;但加载完毕后,如果你对这些加载对象操作;就会报沙箱异常;


还有,策略配置文件的域信任不可随便使用通配符:*;

这个大家都懂的;(不懂就百度一下:通配符)


还有一个提示:

如果想获取当然执行代码位于哪个域,可以这么干:

//假如:www.example.com/test.swf下有这么一段代码;trace(new LocalConnection().domain); // www.example.com