Flash策略文件

跨域策略文件——解决Flash安全沙箱问题
一、基础解说


用 Flash 文档访问另一个域中的数据。Flash Player 会自动试图从该域加载策略文件。如果试图访问数据的 Flash 文档所在的域包括在该策略文件中,则数据将自动成为可访问数据。

策略文件必须命名为 crossdomain.xml,并且可以驻留在服务器的根目录和其它目录之中,这个服务器提供要被访问的 ActionScript. 数据。每个策略文件对于它所驻留的服务器的端口和协议是特定的,只有在通过 HTTP、 HTTPS 或 FTP 进行通信的服务器上,策略文件才起作用。

flashplayer升级到9.124之后,加强了安全性,之前的crossdomain.xml的写法发生了变化,以下就是该文件的完整写法:


Xml代码
1.<?xml version="1.0"?>
2.<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 3.<cross-domain-policy> 4.<allow-access-from domain="*" /> 5.<allow-http-request-headers-from domain="*" headers="*"/> 6.</cross-domain-policy> <?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

表示该服务允许任何外域来访问。
关于crossdomain.xml的放置目录问题,有如下解决方案,可放置在:

1) 如果这个目录是容器的根目录,可以通过以下的url访问crossdomain.xml:

http://localhost:8080/crossdomain.xml 。
2) 如果crossdomain.xml不是放在根目录下,而是在某个webapp下面,在flex中就需要在初始化的时候应用
Security.loadPolicyFile("http:// localhost:8080/aaa /crossdomain.xml");

其中aaa为webapp的名称
这样,外部Flex访问该服务发布的WebService时,flashplayer首先找的就是crossdomain.xml文件,若安全机制设置为允许访问,则访问成功。


二、详细讲解:

crossdomain.xml每个节点的属性选项,大家可以自己浏览附件的文档。

crossdomain.xml的根节点必须是 cross-domain-policy:

* 它包含三个子节点:site-control, allow-access-from, allow-http-request-headers-from
* 无属性

节点介绍:

* site-control
* 这个节点定义当前域的meta-policy
* meta- policy决定这个域中除了master policy file以外哪些策略文件可以被client接受
* 如果这个策略文件并不是 master policy file,site-control这个节点就会被忽略。
* 如果你用ActionScript指定使用某个非master policy file的策略文件,你必须先检查master policy file的这个子节点以确认你指定的那个policy file是被授权的。
* site-control的属性permitted-cross-domian-policies有5个选项:none--任何policy file都不被允许,包括master policy file。master-only不用解释了。by-content-type--当HTTP头的Content-Type值为text/x- cross-domain-policy才被允许。by-ftp-filename--只有以文件名结尾的URL才被允许。all--不用介绍。默认值是master-only,除了socket policy file,它的默认值是all。


* allow-access-from


* allow-http-request-headers-from

===============================================

Adobe 强烈不推荐的允许所有资源访问的crossdomain.xml文件范例:


Xml代码
1.<?xml version="1.0"?>
2.<!DOCTYPE cross-domain-policy SYSTEM
3."http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 4.
5.<cross-domain-policy> 6. <site-control permitted-cross-domain-policies="all"/> 7. <allow-access-from domain="*" secure="false"/> 8. <allow-http-request-headers-from domain="*" headers="*" secure="false"/> 9.</cross-domain-policy> <?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>


三、举例:

1、下面的代码是一个策略文件,它允许从 aeroflash.org 上的 Flash 文档访问来自 aeroflash.org、 www.friendOfAeroflash.org、*.www.aeroflash.org 和 123.321.0.1 的 Flash 文档:


Xml代码
1.<?xml version="1.0"?>
2.
3.<!-- http://www.aeroflash.org/crossdomain.xml --> 4.
5.<cross-domain-policy> 6.
7. <allow-access-from domain="www.friendOfAeroflash.org" /> 8.
9. <allow-access-from domain="*.aeroflash.org" /> 10.
11. <allow-access-from domain="123.321.0.1" /> 12.
13.</cross-domain-policy> <?xml version="1.0"?>

<!-- http://www.aeroflash.org/crossdomain.xml -->

<cross-domain-policy>

<allow-access-from domain="www.friendOfAeroflash.org" />

<allow-access-from domain="*.aeroflash.org" />

<allow-access-from domain="123.321.0.1" />

</cross-domain-policy>


2、此外,也可以使用通配符允许访问来自任何域的文档:


Xml代码
1.<?xml version="1.0"?>
2.
3.<!-- http://www.aeroflash.org/crossdomain.xml --> 4.
5.<cross-domain-policy> 6.
7. <allow-access-from domain="*" /> 8.
9.</cross-domain-policy>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值