[AS3]as3.0关于LoaderContext详细介绍[安全沙箱相关]
这里swf指被载入的swf,loader是加载方。
securityDomain
只对swf有效,图片无效。
如果载入同一个域(服务器)下的swf,那么总是和loader同一securityDomain,这个不叫import。
如果使用loader.loadbytes(),则必然和loader同一个securityDomain,这个叫import。
如果使用load载入不同域的swf:
默认为另一个securityDomain,没有import。
可以选择设置为和loader同一个securityDomain(不能设其他的securityDomain),这个是import,这个行为称为import loading,等同于把那个不同域的swf拷贝到当前服务器域内载入。被加载的swf所在服务器必须有 policy file信任loader所在域。
看官方文档的过程发现一个漏洞 ,其他人已经写文阐述了绕开AS3安全沙箱,跨域加载SWF 。
沙盒中的程序访问stage的属性、鼠标事件、像素绘制、其他一些属性受限。这是父SWF限制子SWF访问。
而cross-domain policy files则是子SWF所在域防止父SWF对其加载,有点搞不懂了,到底出于安全需要谁需要限制谁?
从跨域脚本攻击来说,应该是子SWF限制父SWF访问子的接口。
allowCodeImport
是否允许import swf:
1.使用Loader.loadBytes()载入swf。
2.使用Loader.load() 从其他域载入swf时,设置 LoaderContext.securityDomain = SecurityDomain.currentDomain。
对于图片没影响,对于当前域的swf也没影响。
applicationDomain
构造函数 ApplicationDomain(parentDomain:ApplicationDomain = null)
这里父swf指loader所在swf,子swf指被加载的swf。
关于 ApplicationDomain:system domain包含所有application domains,包括current domain。current domain是main app运行的环境。
每个security domain分成多个applicationDomain。所以只能对载入为与loader同一个security domain中swf,设置此属性,不然会抛SecurityError 。而且也只能赋予同一个security domain的applicationDomain作为其父域。
设置这个属性不是为了安全因素,因为总能通过ApplicationDomain.getDefinition()访问到类;而是为了管理代码,主要是两个swf中有同名(同包同类啥都同)类。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例