CMP4使用手册 - 跨域策略【crossdomain.xml】

### 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例子

<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
其中参数说明可下载官方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，我们还可以通过代理程序去抓取数据