Flash的跨域策略

使用Flash时,很多数据是不能直接跨域加载的,因为跨域不可信,为了安全考虑,Flash将抛出一个SecurityError错误并终止加载操作

需要安全考虑的数据一般是用户可操作性的(可读写),如文本、XML等,对应于CMP4中的配置,列表,歌词,皮肤(需解压操作)等

而其他一些无需用户直接操作的数据(FP内核处理),是可以直接跨域加载的,如http视频,MP3(不读ID3),图片和flash(不通讯)等

问题:如果跨域的数据是安全可信的,比如是自己的分站,二级域名,合作伙伴等,此时需要Flash跨域直接加载数据,如何解决?

使用跨域策略文件crossdomain.xml设置跨域访问权限
策略文件一般放在域的根目录,如:
http://cmp.cenfun.com/crossdomain.xml
(Flash的安全策略已经进行多次修改和增强,这里仅讨论最简单的形式,其他详情请查阅相关说明)
Flash跨域请求时,首先会下载此策略文件,并查看是否有权进行安全访问:
如果下载失败或内容错误,也就是默认为没有策略,此时Flash将终止操作
只有读取到策略中有允许进行操作权限,才能进行下一步访问,否则也将终止操作
一个允许所有数据能被flash跨域访问的crossdomain.xml例子
其中参数说明可下载官方dtd文件查看:http://www.adobe.com/xml/dtds/cross-domain-policy.dtd
CMP4跨域访问示意图
http://A.com/cmp.swf
  ->  
  ->  
  ->  
http://B.com/crossdomain.xml   ->   http://B.com/config.xml
http://C.com/crossdomain.xml   ->   http://C.com/list.xml
http://D.com/crossdomain.xml   ->   http://D.com/test.lrc
A站的CMP分别跨域加载B/C/D站的资源时,都会先下载这些站的crossdomain.xml,然后判断是否有权进行下一步访问
如果跨域数据是永久不可信资源,也就是不能去设置crossdomain.xml,我们还可以通过代理程序去抓取数据